Chrome的Javascript控制台:它根据对象输出了什么?

时间:2011-07-01 22:54:29

标签: javascript google-chrome

从Chrome中的javascript控制台:

> function Person(name){this.name=name;}
undefined

此时,根据Javascript规范,Person.prototype应该是一个空对象。 我们分配一下:

> p=Person.prototype
  > Person

请注意,>人是可点击的,它扩展为:

constructor: function Person(name){this.name=name;}
__proto__: Object

但是......它不是一个空的对象吗?什么是额外的东西? 如果你发出警报:

alert(p)

你得到[object Object]。为什么当您在Chrome控制台中输入时,为什么会出现>扩大的人?这不是一个空的对象吗?

谢谢!

3 个答案:

答案 0 :(得分:10)

不,prototype始终具有constructor属性,该属性指向它是原型的函数。当然,它也继承自一个对象,即内部__proto__属性。

它在ECMAScript 5 Section 13.2, Creating Function Objects中定义:

  

(...)

     

16。设 proto 是创建一个新对象的结果,因为new Object() Object the standard built-in constructor with that name所在的表达式构建了一个新对象。

     

17。使用参数"constructor"Property Descriptor {[[Value]]: F ,{[[]调用 proto 的[[DefineOwnProperty]]内部方法Writable]]:true,[[Enumerable]]:false,[[Configurable]]:true},false。

     

18。使用参数"prototype"Property Descriptor {[[Value]]: proto ,{[[]调用 F 的[[DefineOwnProperty]]内部方法Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false},false。

     

(...)

这意味着:

创建一个名为 proto 的新空对象(16)。在该对象上定义属性constructor并将值设置为 F (函数本身)(17)。然后在函数 F 上定义属性prototype,并将其值设置为 proto


如果alert是一个对象,则该对象将转换为字符串。除非重写“特殊”[object Object]方法,否则默认行为是将对象转换为toString字符串。

Chrome控制台列出了这些属性,因为它用于调试,因此您需要信息。 [object Object]信息量不大。

FWIW,一个空对象看起来像这样:

empty object

您还可以在此处查看内部__proto__媒体资源。空对象始终继承了一些默认属性,但它没有拥有属性。

答案 1 :(得分:0)

Chrome的控制台是一款开发者工具。它旨在显示深入的信息。在这种情况下,您将查看刚刚定义的类的预定义属性。

答案 2 :(得分:0)

这些是从Object类继承的方法和属性。

It discusses the defaults here