在Object.create中使用对象文字与函数表达式之间有区别吗?

时间:2014-03-11 15:16:49

标签: javascript object

使用Object.create时,原型是对象文字还是函数表达式会有所不同吗?

在这个例子中,原型是定义为函数还是对象是否重要?

var CircleObj = {
    x: 0,
    y: 0
}

var CircleFunc = function(){
  this.x = 0; 
  this.y = 0;
}

var myCircleObj = Object.create(CircleObj, {
  x: { writable: true, configurable:true, value: 1 },
  y: { writable: true, configurable:true, value: 1 }
});

var myCircleFunc = Object.create(CircleFunc, {
  x: { writable: true, configurable:true, value: 2 },
  y: { writable: true, configurable:true, value: 2 }
});

编辑

我在整个过程中重写了这些属性让我感到困惑。 使用不带属性的Object.create可以明显看出它只适用于对象。

var myCircleObj = Object.create(CircleObj) 
var myCircleFunc = Object.create(CircleFunc)

1 个答案:

答案 0 :(得分:1)

Object.create 1st参数表示新Object将继承这些属性。在您的示例中:

案例1: 新对象将继承x&来自CircleObj的y属性

案例2: 新对象不会继承x&来自CircleFunc的y属性,因为它可以被称为带或不带new的函数。

但是因为你正在压倒x&在案例1和案例1中的Object.create中的y属性你没有正确使用它们。

因此,将Object文字或新的Object()传递给Object.create的第一个参数,以便从中继承它的属性。