是否可以从 javascript 中的原型方法访问私有类属性
Is it possible to access private class attribute from its prototyped method in javascript?
我有这个私有类属性,我想在原型方法中更改它的值。但是"privateVariable"在"增量"方法中是不可见的。如何从此方法访问此属性?
var myClass = function(){
var privateVariable = 1
}
myClass.prototype.increment=function(){
privateVariable++
}
请注意,这是一个私有属性。
var
是一个函数范围的变量声明,因此在其函数(在本例中为 myClass
函数)之外无法访问。解决问题的两种方法是通过使用this.privateVariable = 1
使变量公开,或者使用可以访问变量的闭包。以下是后者的简单示例:
function MyClass(){
var privateVar = 1;
this.incrementPrivateVar = function(){
return privateVar++;
}
}
var instance = new MyClass();
instance.incrementPrivateVar();
incrementPrivateVar()
还返回私有变量的值,但可以通过简单地从该函数中删除return
来防止这种情况。
如果您使用的是 ES6,则有一种新的、更好的方法来创建和访问基本上防弹的私有数据:WeakMap
。这是上面 ES6 中的示例:
let privateData = new WeakMap();
class MyClass {
constructor(data) {
privateData.set(this, data);
}
getData() {
return privateData.get(this);
}
}
let instance = new MyClass({
data1: 1,
data2: 2
});
instance.getData();
尽管您可以在控制台中检查privateData
的内容,但在脚本中,您需要具有正确的特定MyClass
实例才能访问 privateData
中的数据。为了防止任何人访问privateData
中的内容,您可以简单地将let instance = ...
包装在一个块中,从而阻止访问instance
变量,从而阻止访问privateData
的内容。
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 从vuejs中的组件模板访问父方法
- 访问对象的最简单方法'的单独财产
- 有没有一种方法可以从光滑的网格访问插件
- 尝试访问方法的 OOP JavaScript
- 从匿名函数层内访问方法变量
- jQuery控件之外的访问方法
- 访问方法内部的变量's函数
- Angular2:模板中类的访问方法
- 在javascript中使用对象访问方法
- 如何在原型继承模式中访问方法
- async模块内部类的访问方法或
- 当用作其他对象的事件处理程序时,访问方法中的成员
- 在javascript中访问方法skillet.toString()
- 为什么我的applet在通过JavaScript访问方法时不能加载本地库?
- 另一个插件的访问方法
- 使用jquery脚本时如何访问方法
- Javascript -如何在没有'this'的情况下改变作用域和访问方法?
- 为什么我的主干模型奇怪地嵌套在集合中,需要钻取才能访问方法/属性?
- Javascript OOP -从原型设置器访问方法