为什么构造函数发生了变化?

时间:2013-05-30 01:29:57

标签: javascript prototype

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

2 个答案:

答案 0 :(得分:7)

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

Foo.prototype = { constructor: Foo };

实例化的函数对象获取一个已经以这种方式初始化的“prototype”属性的对象。

答案 1 :(得分:1)

你不能。

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

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