6

我想知道__proto__Object.create方法之间的区别。举个例子:

var ob1 = {a:1};
var ob2 = Object.create(ob1);

ob2.__proto__ === ob1; // TRUE

这意味着 Object.create 方法创建一个新对象并将__proto__链接设置为作为参数接收的对象。为什么我们不直接使用__proto__链接而不是使用创建方法?

4

2 回答 2

3

为什么我们不直接使用 proto 链接而不是使用 create 方法?

因为__proto__非标准 属性,因此不一定在每个浏览器中都可用。

然而,它似乎被考虑用于ES.next。更多信息:MDN -__proto__

于 2013-03-11T13:17:54.077 回答
3

__proto__是非标准的,不会在所有地方都得到支持。 Object.create是官方规范的一部分,应该得到未来每个环境的支持。

它在不同的地方也有不同的实现。

有效的 Javascript

例如,在处理具有空原型的对象时,环境有所不同。在某些环境中,__proto__是从 Object.prototype 继承的,因此具有 null 原型的对象没有特殊 __proto__属性

继续创建对象和实现继承的公认方法是Object.create函数,如果您确实需要访问原型,您将希望使用Object.getPrototypeOf 这些函数是标准化的,并且应该在所有现代环境中都可以正常工作

于 2013-03-11T13:18:10.050 回答