2

我试图理解纯基于原型的 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

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

4

1 回答 1

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

于 2012-03-13T08:33:43.223 回答