我有这个私有类属性,我想在prototyped方法中改变它的值。但是“privateVariable”在“增量”方法中是不可见的。如何从此方法访问此属性?
var myClass = function(){
var privateVariable = 1
}
myClass.prototype.increment=function(){
privateVariable++
}
请注意,这是私人属性。
答案 0 :(得分:0)
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
。