为什么构造函数不是构造函数?

时间:2012-09-12 19:27:18

标签: javascript

请考虑以下代码段:

​f = function() {};
f.prototype = {};
thing = new f;

我很惊讶thing.constructor​Object()。 (参见小提琴here。)

为什么thing.constructor函数不是f

1 个答案:

答案 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