Javascript行为重用:这种方法有哪些副作用?

时间:2012-02-25 16:33:07

标签: javascript inheritance prototype-oriented

我正在尝试理解基于原型的纯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对象,创建两个不同的无线电。

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

这有效,但会继续吗?任何人都可以预测任何不必要的结果吗?

1 个答案:

答案 0 :(得分:2)

像@pimvdb所说,删除状态,这很有效。

// 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)来实例化它。