原型(prototype) getter 访问的 Javascript 私有(private)属性

标签 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;}); 返回一个空字符串

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

最佳答案

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

您的示例之所以有效,是因为 getter 关闭了(因此保留了对 prop2 的访问权限),即使在构造函数返回之后也是如此。

关于原型(prototype) getter 访问的 Javascript 私有(private)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20727715/

相关文章:

javascript - 将对象属性和值转换为字符串

javascript - 表单验证和所有后续代码不执行

c# - 强制将静态类常量作为数据类型

java - 在我的应用程序上生成 APK 构造函数问题

python - 如何在具有高度受限实例的 Python 中创建类

javascript - 如何使用 Backend 和 Ionic 存储图像?

javascript - jQuery Promise 中的变异参数

javascript - PayPal onApprove 不调用 ajax 函数

c++ - 设置类静态

Python 类与类之间的方法调用