目前我在下一个例子中声明了JS类:
function X(a) {
this.x = a;
X.prototype.do = function () {
console.log(x);
}
}
我想删除'this'关键字,所以现在我的类看起来像这个例子:
function X(a) {
var x = a;
X.prototype.do = function () {
console.log(x);
}
}
当我有一个X类实例时,这很有用。当我尝试创建多个实例时,我会看到下一个问题:
var x1 = new X(1);
x1.do(); // prints 1
var x2 = new X(2);
x2.do(); // prints 2
x1.do(); // prints 2 instead of 1
该问题阻止我创建同一个类的多个实例。 有谁知道为什么会出现这个问题以及如何避免它?
答案 0 :(得分:5)
您正在重新定义该方法的 prototype
实现,这意味着您正在为该类的每个实例重新定义它。并且由于该方法返回一个闭合值,它为该类的每个实例返回相同的值。
将其写为:
function X(a) {
this.x = a;
}
X.prototype.do = function () {
console.log(this.x);
}
或:
function X(a) {
this.do = function () {
console.log(a);
};
}
两者都不奇怪。