gpt4 book ai didi

javascript - JavaScript 函数的原型(prototype)属性的初始值是多少?

转载 作者:数据小太阳 更新时间:2023-10-29 05:08:53 25 4
gpt4 key购买 nike

我知道 JavaScript 函数对象的 prototype 属性被复制到内部 [[Prototype]] 属性(又名 __proto__)使用函数作为构造函数实例化的对象。所以,我可以将此属性设置为任何我想充当原型(prototype)的对象:

function Foo() {}
Foo.prototype = {
toString: function() { return "I'm a Foo!"; }
}
new Foo().toString()
// --> "I'm a Foo!"

似乎普遍的做法是将应作为类方法的函数添加到新生成函数的现有原型(prototype)中,如下所示:

function Bar() {}
Bar.prototype.toString = function() {
return "I'm a Bar!";
}
new Bar().toString()
// --> "I'm a Bar!"

不过,我不清楚 prototype 属性的初始值 是什么。

function Baz() {}
Baz.prototype
// --> Baz {
// constructor: function Baz() {},
// __proto__: Object
// }

评论显示了 Chrome 的 JavaScript 控制台打印的内容。这是否意味着我创建的每个函数实际上都创建了两个 对象?一种用于函数本身(构造函数),另一种用于其原型(prototype)?

这是在 ECMAScript 标准的某处定义的吗?我试图找到它,但找不到。所有浏览器都以相同的方式处理这个问题吗?

最佳答案

任何新创建的 Function 实例上的 prototype 的初始值是 Object 的新实例,但具有自己的属性 constructor 设置为指向新函数。

ECMA262-5 在第 13.2 节中以典型的 ECMAScript 规范完全不可读的方式对此进行了描述:

(16.) Let proto be the result of creating a new object as would be constructed by the expression new Object() where Object is the standard built-in constructor with that name

(17.) Call the [[DefineOwnProperty]] internal method of proto with arguments "constructor", Property Descriptor {[[Value]]: F, { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true}, and false.

(18.) Call the [[DefineOwnProperty]] internal method of F with arguments "prototype", Property Descriptor {[[Value]]: proto, { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false}, and false.

关于javascript - JavaScript 函数的原型(prototype)属性的初始值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4073677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com