4

为什么添加原型后构造函数会从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]
}

http://jsfiddle.net/vDCTJ/

4

2 回答 2

7

发生这种情况是因为您为 Foo 的原型提供了一个全新的对象,而您没有设置该对象的“构造函数”属性。

Foo.prototype = { constructor: Foo };

实例化的函数对象为其“原型”属性获取一个对象,该对象已经以这种方式初始化。

于 2013-05-30T01:33:32.390 回答
1

你不能。

foo1是使用具有对它的引用的初始Foo.prototype对象创建的,它继承。constructorFoo

相反,foo2它确实继承自您在实例化它之前设置的空对象Foo.prototype。并且该对象从 继承其constructor属性Object.prototype,因此foo2.constructor === Object

于 2013-05-30T01:34:23.820 回答