gpt4 book ai didi

javascript - .prototype 和 [[prototype]]。为什么 .prototype 是一个空对象?

转载 作者:行者123 更新时间:2023-11-28 10:49:29 25 4
gpt4 key购买 nike

尽管阅读了 StackOverflow 上的大多数文章,但我现在实际上对原型(prototype)非常困惑。

function Foo() {

}

Foo.prototype.speak = function() {
console.log('Foo');
};

function Bar() {

}

console.log(Bar.prototype); // {}

Bar.prototype = Object.create(Foo.prototype);

console.log(Bar.prototype); // {} ----- (1)

Bar.prototype.speak = function() { // ----------(2)
console.log('Bar');
};

console.log(Bar.prototype); // { speak: [Function] } ----- (3)

问题:

1) 为什么在Object.create之后(1)是一个空对象。难道它不应该用 Foospeak 方法 来转换对象吗?

2)我实际上在(2)上改变了什么? Bar 对象还是 prototype 对象?到底发生了什么?

3) (3) 上发生了什么。

4) [[prototype]] 是如何参与这一切的?我所知道的是,如果当前对象不包含属性,则 [[prototype]] 用于查找。

可以肯定的是,.prototype !== [[prototype]][[prototype]] === __proto__

抱歉,如果这是重复的。因为尽管有多个类似的问题,但我似乎无法回答这些问题。

最佳答案

您不能通过简单地尝试分配函数/对象来更改它的原型(prototype)。您需要在创建对象时设置它,或者您应该使用 ES6 功能来更改它。

所以,Bar.prototype = Object.create(Foo.prototype);没有任何意义。

[[prototype]] 是对象真实原型(prototype)的内部表示。

也许您应该根据这些基本原理重新安排您的测试用例并寻求解释。

关于javascript - .prototype 和 [[prototype]]。为什么 .prototype 是一个空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36171366/

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