创建不同的类实例

时间:2016-04-18 14:02:23

标签: javascript

目前我在下一个例子中声明了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

该问题阻止我创建同一个类的多个实例。 有谁知道为什么会出现这个问题以及如何避免它?

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);
    };
}

两者都不奇怪。