请考虑以下代码段:
f = function() {};
f.prototype = {};
thing = new f;
我很惊讶thing.constructor
是Object()
。 (参见小提琴here。)
为什么thing.constructor
函数不是f
?
答案 0 :(得分:9)
因为您已使用普通对象完全替换prototype
的原始f
对象。原始prototype
对象通过f
属性保留对.constructor
的引用。
使用对象文字语法创建的对象的构造函数将是Object
构造函数。
要取回它,你需要手动将它放在那里。
f = function() {};
f.prototype = {};
f.prototype.constructor = f;
thing = new f;
这将遮蔽新原型对象的原型链中的.constructor
属性。
如果您删除该属性,则会再次获得Object
。
delete f.prototype.constructor;
console.log(thing.constructor); // Object