proto link和Object.create之间的区别

时间:2013-03-11 13:14:30

标签: javascript object prototype

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

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

ob2.__proto__ === ob1; // TRUE

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

2 个答案:

答案 0 :(得分:3)

  

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

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

然而,ES.next似乎考虑了这一点。更多信息:MDN - __proto__

答案 1 :(得分:3)

__proto__是非标准的,并不会在任何地方都受到支持。 Object.create是官方规范的一部分,应该得到未来各种环境的支持。

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

来自Effective Javascript

  

环境不同,例如,用a处理物体   null原型。在某些环境中,__proto__是继承自的   Object.prototype,所以带有null原型的对象没有特殊之处   __proto__属性

继续前进创建对象和实现继承的方法是Object.create函数,如果确实需要访问原型,则需要使用Object.getPrototypeOf这些函数是标准化的,应该在所有现代环境中都一样的工作