我想知道__proto__
和Object.create
方法之间的区别。举个例子:
var ob1 = {a:1};
var ob2 = Object.create(ob1);
ob2.__proto__ === ob1; // TRUE
这意味着 Object.create 方法创建一个新对象并将__proto__
链接设置为作为参数接收的对象。为什么我们不直接使用__proto__
链接而不是使用创建方法?
我想知道__proto__
和Object.create
方法之间的区别。举个例子:
var ob1 = {a:1};
var ob2 = Object.create(ob1);
ob2.__proto__ === ob1; // TRUE
这意味着 Object.create 方法创建一个新对象并将__proto__
链接设置为作为参数接收的对象。为什么我们不直接使用__proto__
链接而不是使用创建方法?
为什么我们不直接使用 proto 链接而不是使用 create 方法?
因为__proto__
是非标准 属性,因此不一定在每个浏览器中都可用。
然而,它似乎被考虑用于ES.next。更多信息:MDN -__proto__
。
__proto__
是非标准的,不会在所有地方都得到支持。 Object.create
是官方规范的一部分,应该得到未来每个环境的支持。
它在不同的地方也有不同的实现。
例如,在处理具有空原型的对象时,环境有所不同。在某些环境中,
__proto__
是从 Object.prototype 继承的,因此具有 null 原型的对象没有特殊__proto__
属性
继续创建对象和实现继承的公认方法是Object.create
函数,如果您确实需要访问原型,您将希望使用Object.getPrototypeOf
这些函数是标准化的,并且应该在所有现代环境中都可以正常工作