2013-11-02 48 views
0

我可以不读铬合金对象显示为我应该:Chrome的对象显示?

我有这样的代码:

function Foo(){}; 
var g= new Foo(); 

此外 - (控制台代码):

>>Foo.prototype // Foo {} 

问题:

是不是说它的类型是的实例?或者只是一个plain常规对象?

p.s. - 我听说过原型是一个普通的对象。所以Foo字Foo{}让我觉得这是一个例子Foo

为什么我问?

由于运行以下命令:

Foo.prototype.__proto__

显示Object {},而不是它的构造函数的原型是:Foo.prototype ...

附加信息:

相关矿井的question(其没有谈及铬显示对象的方式

回答

3

Foo.prototype有一个属性constructor,它被定义为Foo.prototype.constructor = Foo;这就是为什么控制台显示它这样

这是有constructor财产的Foo.prototype后果。构造函数的每个原型都具有指向该函数的constructor属性,例如,现在

Foo.prototype.constructor = Foo; 

,它看起来像,以确定哪个构造函数的对象是,Chrome的控制台观察物体的constructor财产的实例,然后假定对象是函数的一个实例。
这适用于几乎所有情况,但不适用于原型对象,因为它们明确设置了constructor属性。

例子:

> function Foo() {} 
undefined 
> Foo.prototype.constructor = function xyz() {} 
function xyz() {} 
> Foo.prototype 
xyz {} 

另外,更简单的例子:

> var obj = {}; 
> obj 
Object {} 
> obj.constructor = function xyz() {}; 
function xyz() {} 
> obj 
xyz {} 

正如你可以看到,控制台实际上只是在寻找对象的constructor属性(通常继承)和然后打印分配给它的功能的功能名称。

Foo.prototype.constructor只是创建函数时分配的常规属性。 它的目的是实际实例Foo(用new Foo创建)具有指向Foo的构造函数属性。 由于实例继承了原型的所有属性。

+0

我不明白:什么是'Foo.prototype'类型? –

+0

这是一个对象。 –

+0

这是类型是Foo实例。 'Foo {}'....对吗? (这是cosnsole显示的内容) –