我最近学习了更多关于嵌套函数的知识,并发现我通过在构造函数中定义方法来编写低效代码: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;});
返回一个空字符串
有没有办法解决这个问题?还是一种更好的方法来使对象中的属性只能通过抽象访问?
最佳答案
JavaScript 中的私有(private)属性依赖闭包机制在定义函数/getter 时保留词法范围(或者,简单地说,可用变量)。换句话说,不,如果您希望属性保持私有(private),则不能在构造函数之外执行此操作。尝试在其他任何地方执行此操作要么会“泄漏”访问权限,要么不会成为 prototype
的一部分。
您的示例之所以有效,是因为 getter 关闭了(因此保留了对 prop2
的访问权限),即使在构造函数返回之后也是如此。
关于原型(prototype) getter 访问的 Javascript 私有(private)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20727715/