3

为了更好地理解 javascript 背后的原型,我偶然发现了以下内容,到目前为止我还无法理解。

我知道函数是第一类对象,但我不明白为什么 Object 在 Function.prototype 上设置属性后会获取此属性

Function.prototype.foo = 'bar';

Object.foo // Object now has this property and returns 'bar'

Object.foo === Function.prototype.foo // returns true
4

3 回答 3

3

Object是函数,typeof Object == 'function'是真的。因此,您分配 的属性Function.prototype,它也会让Object具有该属性。(在财产链中。)

于 2012-07-10T02:05:09.253 回答
2

如果我没记错的话 Function.prototype 是所有继承对象的原型。因为你设置Function.prototype.foo = 'bar';的所有对象都继承了这个foo属性。这就是第三行代码返回 true 的原因。

于 2012-07-10T02:00:56.060 回答
1

这是因为ObjectFunction对象共享相同的内部[[Prototype]]属性。

正如 Ecma-262 所说:

Function原型对象的内部[[Prototype]]属性的值就是Object原型对象。

因此,如果您向Function的原型添加任何属性,该属性也可以通过Object对象访问,反之亦然。

如果你想深入了解它,我建议你看一下Ecma-262 Specification

希望能帮助到你。

于 2012-07-10T02:21:47.103 回答