我最近学到了更多关于嵌套函数的知识,并发现我通过在构造函数中定义方法来编写效率低下的代码: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;});
返回一个空白字符串
有没有办法解决这个问题?或者更好的方法使对象中的属性只能通过抽象来访问?
答案 0 :(得分:1)
如果你想拥有像prop2
这样的私有变量,那么你必须定义在私有变量范围内(在构造函数内)访问它们的方法,因此你不能使用原型对于那些方法。
简单的权衡 - 你必须选择其中一个。
答案 1 :(得分:1)
JavaScript中的私有属性依赖于闭包机制来在定义函数/ getter时保留词法范围(或者说,显然是可用变量)。换句话说,不,如果您希望属性保持私有,则不能在构造函数之外执行此操作。试图在其他任何地方执行此操作会“泄漏”访问权限,或者不会成为prototype
的一部分。
你的例子工作的原因是因为即使在构造函数返回之后,getter 也会关闭(因此保留对prop2
的访问权限)。