我使用以下代码获得意外结果:
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]
Run Code Online (Sandbox Code Playgroud)
我发现它令人惊讶u.b
并且u2.b
包含相同的值,即使每个实例都TestModel
应该根据我设置原型的方式拥有自己的实例变量.所以这是我期待的输出:
console.log(u.a, u.b); // expecting: 1 [1]
console.log(u2.a, u2.b); // expecting: 2 [2]
Run Code Online (Sandbox Code Playgroud)
如果我设置b
为一个对象并在其上设置键而不是将其用作数组,则会发生同样的事情.我在这里不理解什么?