【发布时间】:2012-01-04 00:44:01
【问题描述】:
我得到以下代码的意外结果:
var TestModel, u, u2;
function TestModel() {}
TestModel.prototype.a = null;
TestModel.prototype.b = [];
u = new TestModel();
u.a = 1;
u.b.push(1);
u2 = new TestModel();
u2.a = 2;
u2.b.push(2);
console.log(u.a, u.b); // outputs: 1 [1,2]
console.log(u2.a, u2.b); // outputs: 2 [1,2]
我发现 u.b 和 u2.b 包含相同的值令人惊讶,尽管根据我设置原型的方式,TestModel 的每个实例都应该有自己的实例变量。所以这是我期待的输出:
console.log(u.a, u.b); // expecting: 1 [1]
console.log(u2.a, u2.b); // expecting: 2 [2]
如果我将b 设置为对象并在其上设置键而不是将其用作数组,则会发生同样的事情。我在这里不明白什么?
【问题讨论】:
标签: javascript prototype-programming