Javascript 为什么用函数getPrototypeOf/setPrototypeOf替换proto?

Javascript 为什么用函数getPrototypeOf/setPrototypeOf替换proto?,javascript,prototype,Javascript,Prototype,我只是想知道用函数getPrototypeOf/setPrototypeOf替换\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>的主要原因是什么 提前感谢 使用\uuuu proto\uuuu是有争议的,不鼓励使用。它最初从未包含在ECMAScript语言规范中,但现代浏览器还是实现了它。直到最近,\uuu proto\uuu属性才被ECMAScript 2015规范标准化,以便与web浏览器兼容,因此它将在未来得到支持。它被弃用,取而代之的是Obj

我只是想知道用函数
getPrototypeOf/setPrototypeOf
替换
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>的主要原因是什么

提前感谢

使用
\uuuu proto\uuuu
是有争议的,不鼓励使用。它最初从未包含在ECMAScript语言规范中,但现代浏览器还是实现了它。直到最近,
\uuu proto\uuu
属性才被ECMAScript 2015规范标准化,以便与web浏览器兼容,因此它将在未来得到支持。它被弃用,取而代之的是
Object.getPrototypeOf/Reflect.getPrototypeOf
Object.setPrototypeOf/Reflect.setPrototypeOf

Object.getPrototypeOf
及其变体自引擎实现以来已完全由规范定义<代码>\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


它允许通过语法更改原型,看起来它只是将普通属性分配给对象,而事实上,如果属性是
\uuuuuu proto\uuuuu
,则调用setter并更改对象的内部原型。这是不可取的行为,可能是一个安全漏洞-但是,有些站点仍然使用
\uuuu proto\uuuu
,因此环境无法在不破坏这些站点的情况下删除功能,因此它们不会。但是它仍然可以被标记为不推荐使用。

这并不能真正解释为什么他们不只是使用
\uuuu proto\uuuu
并在standards@Kaiido由于
\uuuu proto\uuuu
的包含是非标准的,因此它们在不同的实现中可能表现不同。引入一个新的标准API要比标准化一个现有的非标准API容易得多,因为它在不同浏览器之间可能存在不一致的行为。@PatrickRoberts hum不是真的没有。生活标准就是由这些组成的:一个供应商实现新的东西,另一个供应商遵循,然后根据“标准”行为编写规范。当发现实现不同时,就会讨论检查哪些实现或规范应该被编辑以符合实际的“标准”。部分原因可能是
\uuuuu proto\uuuu
继承自
对象。prototype
,因此几乎不可能将其用于自定义原型对象,而且可以被跟踪。我甚至不知道
Object.getOwnPropertyDescriptor(Object.prototype,'.'uuu proto'.'uu').get.call(myObject)
works?…(续)它的添加还导致库中存在许多安全漏洞,从而允许原型污染攻击发生。