【发布时间】:2012-02-25 16:33:06
【问题描述】:
我正在尝试理解纯基于原型的 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
这行得通,但它会继续吗?任何人都可以预测任何不想要的结果吗?
【问题讨论】:
-
我不确定这是否不需要,但
Radio.on()会将kitchenRadio.state设置为true。 -
所以我必须在 kitchenRadio 和 carRadio 中专门创建状态属性以避免这种情况。我可以在不广泛改变方法的情况下解决这个问题吗?
-
我想重点是应该继承函数,而不是
state等属性。所有无线电都以共同的方式打开,但每个无线电都有自己的状态。因此,每个最终实例都有自己的属性,而函数是继承的。
标签: javascript inheritance prototype-oriented