具有多个属性的Object.create()的简写

时间:2016-12-07 22:41:02

标签: javascript ecmascript-6 ecmascript-5

如果我想在JavaScript中创建一个具有到另一个对象的原型链接的对象,但是它有几个自己的属性,我该怎么做呢?

var object1 = {
  a: 1,
  b: 2
};

var object2 = Object.create( object1 );
object2.c = 3;
object2.d = 4;

console.log( object2 ); // my new object with object1 as it's prototype link

我的挑战是,我必须一次设置object2个属性。

我的另一个选择是:

var object1 = {
  a: 1,
  b: 2
};

var object2 = {
  c: 3,
  d: 4
};
    
Object.setPrototypeOf( object2, object1 );

console.log( object2 );

我上面的挑战是表现应该是可怕的。即,setPrototypeOf很慢。 https://jsperf.com/object-create-vs-object-setprototypeof

然后当然,你提供的是“速记”,writeableenumerable以及Object.create()的所有内容,但这并不是真正的简写。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

作为for="navigation"的替代方法,请记住Object.create接受第二个参数,其中包含要添加到对象的属性描述符:

Object.assign

请注意,默认值是不可配置的,不可写的且不可枚举的。

如果这是一个问题,ES2017会介绍Object.getOwnPropertyDescriptors

var object1 = {
  a: 1,
  b: 2
};
var object2 = Object.create(object1, {
  c: {value: 3, enumerable: true},
  d: {value: 4, enumerable: true}
});
console.log( object2 ); // my new object with object1 as it's prototype link

答案 1 :(得分:2)

您可以将Object.createObject.assign结合使用:

var object2 = Object.assign(Object.create(object1), {
    c: 3,
    d: 4
});