我正在努力理解纯基于原型的JavaScript,而我正在努力解决的一个具体问题是重用(继承)。
对于我的项目,我采用了这种方式来创建可以重用的对象。
// very generic prototype
var Apparatus = (function(){
var self = Object.create({});
self.state = false;
self.on = function() { this.state = true; };
return self;
})();
// more specific prototype
var Radio = (function(){
var self = Object.create(Apparatus);
self.frequency = 0;
self.setFrequency = function(f) { this.frequency = f; }
self.getFrequency = function() { return this.frequency; }
return self;
})();
然后我想"实例化"/复制Radio对象,创建两个不同的Radio。
var kitchenRadio = Object.create(Radio);
kitchenRadio.state = false;
kitchenRadio.on();
var carRadio = Object.create(Radio);
carRadio.state = false;
console.log(kitchenRadio.state, carRadio.state);
// true false
这是有效的,但它会继续吗?有人能预测出任何不想要的结果吗?
就像@pimvdb所说的,删除state,这样做效果很好。
// very generic prototype
var Apparatus = (function(){
var self = Object.create({});
self.on = function() { this.state = true; };
return self;
})();
// more specific prototype
var Radio = (function(){
var self = Object.create(Apparatus);
self.setFrequency = function(f) { this.frequency = f; }
self.getFrequency = function() { return this.frequency; }
return self;
})();
然后我使用Object.create(Object, params)
来实例化它。