Mer*_*erc 3 javascript google-chrome
来自Chrome中的javascript控制台:
> function Person(name){this.name=name;}
undefined
Run Code Online (Sandbox Code Playgroud)
此时,根据Javascript规范,Person.prototype应该是一个空对象.我们分配它:
> p=Person.prototype
> Person
Run Code Online (Sandbox Code Playgroud)
请注意,> Person是可点击的,它会扩展为:
constructor: function Person(name){this.name=name;}
__proto__: Object
Run Code Online (Sandbox Code Playgroud)
但是......它不是一个空的对象吗?什么是额外的东西?如果你发出警报:
alert(p)
Run Code Online (Sandbox Code Playgroud)
你得到[object Object].为什么,当您在Chrome控制台中键入它时,它会出现>人物扩展?这不是一个空的对象吗?
谢谢!
Fel*_*ing 10
不,prototype始终具有constructor指向功能的属性,它是原型.当然它也从一个对象继承,那就是内部__proto__属性.
它在ECMAScript 5第13.2节" 创建函数对象"中定义:
(......)
16.设原是创建一个新对象作为将由表达来构建的结果
new Object(),其中Object是内置构造具有该名称的标准.17. 使用参数调用proto的[[DefineOwnProperty]]内部方法
"constructor",属性描述符 {[[Value]]:F,{[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:真假.18. 使用参数调用F的[[DefineOwnProperty]]内部方法
"prototype",属性描述符 {[[Value]]:proto,{[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:假,和假.(......)
这意味着:
创建一个名为proto(16)的新空对象.constructor在该对象上定义属性并将值设置为F(函数本身)(17).然后prototype在函数F上定义属性并将其值设置为proto.
如果alert是对象,则将对象转换为字符串.[object Object]除非toString重写"特殊" 方法,否则默认行为是将对象转换为字符串.
Chrome控制台列出了这些属性,因为它用于调试,因此您需要信息.[object Object]信息量不大.
FWIW,一个空对象看起来像这样:

您还可以在__proto__这里看到内部属性.空对象始终会继承某些默认属性,但它没有自己的属性.
| 归档时间: |
|
| 查看次数: |
2141 次 |
| 最近记录: |