Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么ECMAScript标准中没有Object.setPrototypeOf(…)呢?_Javascript_Prototype_Ecmascript 6_W3c - Fatal编程技术网

Javascript 为什么ECMAScript标准中没有Object.setPrototypeOf(…)呢?

Javascript 为什么ECMAScript标准中没有Object.setPrototypeOf(…)呢?,javascript,prototype,ecmascript-6,w3c,Javascript,Prototype,Ecmascript 6,W3c,显然,使用\uuuu proto\uuuu属性仍然是操纵原型链的主要方式,尽管这不符合标准,IE也不支持。尽管您也可以通过使用new构造函数来构造继承,但与\uuuu proto\uuuu属性或符合标准的对象.getPrototypeOf函数相比,这似乎是一个不必要的复杂问题 编辑: 如回答中所述,该方法现在确实存在(ES6标准)。但是,请注意性能警告:指出: Object.setPrototypeOf不会发生。可写协议是一种 实现起来非常困难(必须序列化到循环检查),而且它会创建 各种类型的混

显然,使用
\uuuu proto\uuuu
属性仍然是操纵原型链的主要方式,尽管这不符合标准,IE也不支持。尽管您也可以通过使用
new
构造函数来构造继承,但与
\uuuu proto\uuuu
属性或符合标准的
对象.getPrototypeOf
函数相比,这似乎是一个不必要的复杂问题

编辑:

如回答中所述,该方法现在确实存在(ES6标准)。但是,请注意性能警告:

指出:

Object.setPrototypeOf不会发生。可写协议是一种 实现起来非常困难(必须序列化到循环检查),而且它会创建 各种类型的混淆危险。你可能认为你想要它作为一个 低级锋利的仪器。JS不是那种语言。更高层次 类和混合的形式似乎要好得多,而且不涉及这样的内容 锋利的边缘


它是ES6和谐草案的一部分:

我现在正在最新版本的Chrome中使用它

var proto = {
    foo: 'bar'
};

var object = {};

Object.setPrototypeOf(object, proto);

console.assert(object.foo == 'bar');

谢谢你的回答,尽管我不得不承认我并不完全理解。您的想法是在Javascript中添加非原型继承?在我看来,Object.setPrototypeOf只会创建原型对象引用,所以我不明白这怎么需要序列化。似乎他错了:)刚刚进入Chrome:而且,它已经在Firefox中进行了实验:@Esailija 2017年你对此有何看法?当涉及性能和优化时(在你编写/贡献的libs中),你似乎变得“严肃”,所以我想知道你的想法。强大语言的激增意味着工程师现在更强大了。仅仅是“实施的痛苦”永远不会成为一个好借口,如果不是现在,那么是在未来。好消息。似乎Object.setPrototypeOf()进入了ES6