本文详解JavaScript中类私有与公开成员的实现原理。通过var声明的变量和方法为私有,仅限内部访问;通过this绑定的成员为公开,可被实例调用。文章结合代码示例对比了两种声明方式在实例化后的访问权限差异,并简述了静态类的公开特性。
JavaScript 私有与公开成员实现原理
在深入探讨之前,建议先回顾前两节关于JavaScript命名空间及类定义的内容,以便更好地理解后续概念。
核心逻辑并不复杂,通过下方的代码示例及其详细注释,可以直观地理解私有与公开成员的运作方式。
具体实现代码如下:
// 定义类,本质上是一个函数。在JavaScript中,命名空间、类和成员等概念均基于对象模型。
MyClass = function(){
var _this=this;
// 定义私有变量
var aa="11";
// 定义公开变量
this.bb="22";
// 定义私有方法
function fun1(){
alert(aa);
alert(_this.bb);
}
// 另一种私有方法定义方式
var fun2=function(){
alert(aa);
alert(_this.bb);
}
// 定义公开方法
this.fun3=function(){
alert(aa);
alert(_this.bb);
}
}
// 测试访问权限:
var mc=new MyClass();
mc.aa="AA";// 尝试修改私有变量,无效
mc.bb="BB";// 修改公开变量,成功
mc.fun1();// 调用私有方法,报错
mc.fun2();// 调用私有方法,报错
mc.fun3();// 调用公开方法,成功 成员访问权限总结
总结来说,在类的内部作用域中:
使用 var 关键字声明的变量或函数具有私有属性,外部无法直接访问;
使用 function 关键字直接声明的函数也是私有的;
而通过 this 关键字挂载的变量或方法则具有公开属性,实例化后可被外部调用。
上述规则主要适用于实例类。对于静态类,其本质是一个JSON对象,因此所有成员默认均为公开且对外可见。