当你改变原型时,构造函数为什么会改变?(参见代码)

Why does the .constructor change when you change the .prototype? (see code)

本文关键字:改变 代码 为什么 原型 构造函数 当你      更新时间:2023-09-26

下面的代码进一步解释了这个问题:

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

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

那么,为什么第二个块为false

创建的对象的constructor会因为其原型的constructor而更改。这就是为什么您通常不应该覆盖原型的原因。如果你这样做了,一定要稍后再设置:

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