2013-05-30 139 views
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/

+1

为什么在覆写之后,构造函数1仍然是被调用的? - > http://jsfiddle.net/ttqjV/ – acdcjunior

回答

7

这是因为你给了富其原型一个全新的对象,您没有设置该对象的“构造函数“属性。

Foo.prototype = { constructor: Foo }; 

实例化的函数对象得到一个对象为已在初始化这样他们的“原型”属性。

+0

那就是我一直在做的事情,但我只是在原型中编写整个构造函数:P –

1

你不能。

foo1用具有constructor参照Foo,其它继承的初始Foo.prototype对象创建的。

相比之下,foo2从您设置Foo.prototype的空对象继承到实例化之前。并且该对象从Object.prototype继承其constructor财产,因此foo2.constructor === Object

相关问题