Javascript行为重用:这种方法会有什么副作用?
我试图理解纯粹的基于原型的JavaScript,我正在努力解决的一个具体问题是重用(继承) 对于我的项目,我用这种方法创建了可以重用的对象Javascript行为重用:这种方法会有什么副作用?,javascript,inheritance,prototype-oriented,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; }
// 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所说的,移除状态,这会很好地工作
// 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)
来实例化它 我不确定这是否是不需要的,但是Radio.on()
会将kitchenRadio.state
设置为true
。因此我必须在kitchenRadio和carRadio中专门创建state属性以避免这种情况。我能在不广泛改变方法的情况下解决这个问题吗?我想关键是函数应该被继承,而不是像state
这样的属性。所有收音机都以通用方式打开,但每个收音机都有自己的状态。因此,每个最终实例都有自己的属性,而函数是继承的。