5
考虑下面的代码片段:为什么构造函数不是构造函数?
f = function() {};
f.prototype = {};
thing = new f;
我很惊讶地看到,thing.constructor
是Object()
。 (请参阅小提琴here。)
为什么不是thing.constructor
的功能f
?
考虑下面的代码片段:为什么构造函数不是构造函数?
f = function() {};
f.prototype = {};
thing = new f;
我很惊讶地看到,thing.constructor
是Object()
。 (请参阅小提琴here。)
为什么不是thing.constructor
的功能f
?
因为您已经用普通对象完全替换了f
的原始对象prototype
。这是原来的prototype
对象,通过.constructor
属性举行的参考f
。
一个对象的构造使用对象文本语法将是Object
构造函数创建。
把它找回来,你需要手动把它放在那里。
f = function() {};
f.prototype = {};
f.prototype.constructor = f;
thing = new f;
这会影响新原型对象的原型链中的.constructor
属性。
如果您删除属性,你会再次得到Object
。
delete f.prototype.constructor;
console.log(thing.constructor); // Object