问题描述
如果我想在 JavaScript 中创建一个对象,该对象具有指向另一个对象的原型链接,但有几个它自己的属性,我该怎么做?
If I want to create an object in JavaScript that has a prototype link to another object, but has several of it's own properties how can I do this?
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
的属性.
My challenge here is that I have to set object2
's properties one at a time.
我的另一个选择是:
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
My challenge above is that the performance is supposed to be terrible. Namely, setPrototypeOf
is slow. https://jsperf.com/object-create-vs-object-setprototypeof
当然,还有你提供的速记",writeable
、enumerable
以及 Object.create()
的所有内容,但这并不是真正的速记.
And then of course, there's the "shorthand" where you provide, writeable
, enumerable
and all that to Object.create()
, but that's not really shorthand.
有什么想法吗?
推荐答案
作为 Object.assign
的替代方案,请记住 Object.create
接受带有要添加到的属性描述符的第二个参数对象:
As an alternative to Object.assign
, remember Object.create
accepts a second argument with the property descriptors you want to add to the object:
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
请注意,默认值是不可配置、不可写和不可枚举的.
Note the default is non-configurable, non-writable and non-enumerable.
如果这是一个问题,ES2017 引入了Object.getOwnPropertyDescriptors
.
If that's a problem, ES2017 introduces Object.getOwnPropertyDescriptors
.
var object1 = {
a: 1,
b: 2
};
var object2 = Object.create(object1, Object.getOwnPropertyDescriptors({
c: 3,
d: 4
}));
console.log( object2 ); // my new object with object1 as it's prototype link
这篇关于具有多个属性的 Object.create() 的简写的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!