proto link和Object.create的区别

Difference between proto link and Object.create

本文关键字:区别 create Object link proto      更新时间:2023-09-26

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

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

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

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

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

From Effective Javascript:

环境不同,例如,在对象的处理上零的原型。在某些环境中,__proto__继承自对象。原型,所以具有null原型的对象没有特殊的__proto__地产

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

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

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

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