gpt4 book ai didi

javascript - Object.prototype.__proto__ 不为空

转载 作者:行者123 更新时间:2023-11-30 09:27:18 25 4
gpt4 key购买 nike

为什么可以从 null 更改 Object.prototype.proto

Object.prototype 是罕见的没有原型(prototype)的对象之一,它不继承任何属性(根据 Flanagan 的说法)

我无法想象如何在现实生活中使用 Object.prototype.proto。请举个例子说明为什么要改

最佳答案

I cant imagine how to use Object.prototype.__proto__ in real life

您不会在 Object.prototype 本身上使用它。 __proto__ 是一个访问器属性,由所有从 Object.prototype 继承的对象继承。您可以使用它来获取甚至更改他们的 原型(prototype)(但不应该,请继续阅读)。例如:

class X {
}
let o = {};
console.log(o.__proto__ === Object.prototype); // true
o.__proto__ = X.prototype;
console.log(o instanceof X); // true
console.log(o.__proto__ === Object.prototype); // false

它的提供主要是为了与 Web 上的现有代码兼容,这些代码在 Mozilla 的 JavaScript 引擎中使用了 JavaScript 的专有扩展。不使用 o.__proto__,而是使用 Object.getPrototypeOf(o)Object.setPrototypeOf(o, ...)。 (事实上​​ ,正式的 JavaScript 引擎根本不应该有 __proto__ 除非它们在网络浏览器中使用。It's defined in 规范的附件,不是规范本身,它只适用于网络浏览器 JavaScript 引擎。)

一般来说,甚至不要使用Object.setPrototypeOf。在构造对象之后更改对象的原型(prototype)几乎总是表示存在设计问题。 (并且使得对该对象的后续操作非常慢 [相对而言]。)

关于javascript - Object.prototype.__proto__ 不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48600874/

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