Javascript行为重用:这种方法会产生什么副作用



我正在努力理解纯基于原型的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)来实例化它。

最新更新