object.create(parentObject)和只是将父对象分配给子对象有什么区别?

时间:2017-11-18 15:01:38

标签: javascript

object.create(parentObject)之间有什么区别,只是将父对象分配给子对象,如下所示:

var child = Object.create(parent);
var child2 = parent;

他们似乎对我做同样的事情。 完整代码供参考:



var parent = {
  get: function fn() {
    return this.val;
  },
  val: 42
};

var child = Object.create(parent);
var child2 = parent;

parent.val = 67;
alert(parent.val); //outputs 67
alert(child.val); //outputs 67
alert(child2.val); //outputs 67




1 个答案:

答案 0 :(得分:1)

Object.create(parent)创建一个 new 对象,其原型为parent

分配不会创建新对象,child2parent都会引用同一个对象。

仅在尝试访问对象中不存在的属性时才使用原型。

在下面的示例中,分配给child2.val2更改parent.val2,因为它们是同一个对象。但是,分配到child.val2parent没有影响,因为它们是不同的对象。由于child具有自己的val2属性,因此它不会从父级继承此属性。

var parent = {
  val2: 1
};

var child = Object.create(parent);
var child2 = parent;


child.val2 = 2;
child2.val2 = 3;
console.log(parent.val2); //outputs 3
console.log(child.val2); //outputs 2
console.log(child2.val2); //outputs 3