使用“ Object.create”而不是“ new”
Javascript 1.9.3 / ECMAScript5引入了Object.create
DouglasCrockford等人提倡很长时间的技术。如何new
在下面的代码中替换为Object.create
?
var UserA = function(nameParam) { this.id = MY_GLOBAL.nextId();
this.name = nameParam;
}
UserA.prototype.sayHello = function() {
console.log('Hello '+ this.name);
}
var bob = new UserA('bob');
bob.sayHello();
(假设MY_GLOBAL.nextId
存在)。
我能想到的最好的是:
var userB = { init: function(nameParam) {
this.id = MY_GLOBAL.nextId();
this.name = nameParam;
},
sayHello: function() {
console.log('Hello '+ this.name);
}
};
var bob = Object.create(userB);
bob.init('Bob');
bob.sayHello();
似乎没有任何优势,所以我想我没有。我可能太新古典了。我应该如何使用Object.create
来创建用户“ bob”?
回答:
仅具有一个继承级别,您的示例可能无法让您看到的真正好处Object.create
。
通过此方法,您可以轻松实现 差异继承 ,其中对象可以直接从其他对象继承。
在您的userB
示例中,我认为您的init
方法不应该是公共的,甚至不存在,如果您在现有对象实例上再次调用此方法,则id
andname
属性将发生变化。
Object.create
使您可以使用第二个参数来初始化对象属性,例如:
var userB = { sayHello: function() {
console.log('Hello '+ this.name);
}
};
var bob = Object.create(userB, {
'id' : {
value: MY_GLOBAL.nextId(),
enumerable:true // writable:false, configurable(deletable):false by default
},
'name': {
value: 'Bob',
enumerable: true
}
});
如您所见,可以Object.create
使用与Object.defineProperties
和Object.defineProperty
方法相似的语法,使用对象常量在属性的第二个参数上初始化属性。
它可以让你设置属性的属性(enumerable
,writable
,或configurable
),它可以是非常有用的。
以上是 使用“ Object.create”而不是“ new” 的全部内容, 来源链接: utcz.com/qa/401507.html