为什么更改.prototype时.constructor会改变? (见代码)

时间:2012-02-26 19:17:04

标签: javascript

以下是进一步解释问题的代码:

function MyConstructor() {}
 var myobject = new MyConstructor();
 myobject.constructor == MyConstructor;     // true

function MyConstructor() {}
 MyConstructor.prototype = {};
 var myobject = new MyConstructor(); 
 myobject.constructor == MyConstructor;  // false

那么,为什么第二个块错误

1 个答案:

答案 0 :(得分:3)

创建对象的constructor会发生变化,因为其原型的constructor会发生变化。这就是为什么你通常不应该覆盖原型。如果这样做,请务必稍后再将其设置为:

function MyConstructor() {}
MyConstructor.prototype = {};
MyConstructor.prototype.constructor = MyConstructor;
…
var myobject = new MyConstructor(); 
myobject.constructor == MyConstructor;  // false