由原型getter访问的Javascript私有属性

时间:2013-12-22 08:50:33

标签: javascript class

我最近学到了更多关于嵌套函数的知识,并发现我通过在构造函数中定义方法来编写效率低下的代码:this.method=function(){}并读取使用它会更有效:constructor.prototype.method=function(){} 。 然而,在我将'private'属性写为局部变量并在构造函数中定义getter之前:

function class(prop)
{
   var prop2=prop*2;
   this.__defineGetter__('prop2',function() {return prop2;});
}

但我很快意识到删除构造函数中的第二行并使用class.prototype.__defineGetter__('prop2',function() {return prop2;}); 返回一个空白字符串

有没有办法解决这个问题?或者更好的方法使对象中的属性只能通过抽象来访问?

2 个答案:

答案 0 :(得分:1)

如果你想拥有像prop2这样的私有变量,那么你必须定义在私有变量范围内(在构造函数内)访问它们的方法,因此你不能使用原型对于那些方法。

简单的权衡 - 你必须选择其中一个。

答案 1 :(得分:1)

JavaScript中的私有属性依赖于闭包机制来在定义函数/ getter时保留词法范围(或者说,显然是可用变量)。换句话说,不,如果您希望属性保持私有,则不能在构造函数之外执行此操作。试图在其他任何地方执行此操作会“泄漏”访问权限,或者不会成为prototype的一部分。

你的例子工作的原因是因为即使在构造函数返回之后,getter 也会关闭(因此保留对prop2的访问权限)。