__proto__ 和 Object.getPrototype 是否公开了完全相同的功能?

IT技术 javascript ecmascript-6
2021-03-13 03:13:54

__proto__ES2015 中的标准化是否否定了Object.getPrototypeOf?

1个回答

__proto__Object.getPrototype的暴露完全相同的功能?

不,.__proto__仅适用于从Object.prototype. 并且Object.getPrototype不允许改变原型。

__proto__ES2015 中的标准化是否否定了Object.getPrototypeOf?

你倒退了。ES5Object.getPrototypeOf和 ES6Object.setPrototypeOf完全不需要使用__proto__.

Object.prototype.__proto__访问属性仅在ES6标准化需要它的实现之间的向后兼容性和互操作性。它被明确标记为 Web 遗留功能。检查附件 B 上注释(“ ...legacy features [for] 基于 Web 浏览器的 ECMAScript 实现。[它们]具有 [...] 不受欢迎的特性,并且 [...] 将从本规范中删除 [如果不使用] 大量现有的 Web页 [...]。程序员在编写新的 ECMAScript 代码时不应使用或假设 [它们] 的存在。不鼓励 ECMAScript 实现实现这些功能。 ")

@Marcus 不。最好使用 polyfill Object.getPrototypeOf(使用 实现__proto__)来支持旧浏览器。顺便说一句,问号的意思是“没有人找到支持的最早版本并将其输入表格”,而不是“糟糕的支持”。我什至会质疑那里的一致“是”,肯定是一些早期的移动浏览器没有实现__proto__. 在任何情况下,Object.getPrototypeOf每个 ES5 引擎都支持,无论如何,在较旧的(ES3)引擎中你会遇到一堆其他问题。
2021-04-25 03:13:54
你似乎说从来没有必要使用__proto__. 您的观点得到了您的附录 B 引用以及 MDN 在MDN proto 上的警告的支持然而,同一个页面显示了良好的移动浏览器支持,而MDN getPrototypeOf显示了移动浏览器支持的问号。因此,如果一个项目需要移动浏览器支持,__proto__在这种情况下使用它不是更好吗?
2021-04-27 03:13:54
@trusktrconst b = Object.setPrototypeOf({}, a)或者const b = Object.assign(Object.create(a), {})没有那么糟糕。曾经还有一个关于原型运营商提议const b = a <| {}
2021-05-08 03:13:54
我不得不说,我喜欢我们可以轻松写作const a = {}; const b = { __proto__: a }我希望它不会被弃用。:)
2021-05-15 03:13:54