为什么构造函数在添加原型后会从Foo更改为Object?如何访问原始构造函数?
代码:
function Foo() {}
var foo1 = new Foo();
console.log('foo1: ' + foo1.constructor);
Foo.prototype = {}
var foo2 = new Foo();
console.log('foo2: ' + foo2.constructor);
输出:
foo1: function Foo() {}
foo2: function Object() {
[native code]
}
答案 0 :(得分:7)
之所以发生这种情况,是因为你为它的原型给了Foo一个全新的对象,而你没有设置该对象的“构造函数”属性。
Foo.prototype = { constructor: Foo };
实例化的函数对象获取一个已经以这种方式初始化的“prototype”属性的对象。
答案 1 :(得分:1)
你不能。
foo1
是使用最初的Foo.prototype
对象创建的,该对象具有constructor
对Foo
的引用,并继承了它。
相反,foo2
确实在实例化之前从您设置Foo.prototype
的空对象继承。该对象从constructor
继承其Object.prototype
属性,因此foo2.constructor === Object
。