【发布时间】:2012-08-17 01:59:15
【问题描述】:
我有以下代码定义了Car。每个Car 都有一个颜色,以及一个setColor(color) 函数。我想添加在调用setColor(color) 时调用的侦听器函数,并且我希望能够随时添加这些侦听器函数。这是一个合适的方法吗?有没有更清洁的方法?
function Car() {
this._color = 'red';
this._callbacks = {};
this.setColor = function(color) {
this._color = color;
console.log(">>> set car color to " + color);
if (this._callbacks['setColor']) {
this._callbacks['setColor']();
}
};
this.addListener = function(functionName, handler) {
if (this._callbacks[functionName]) {
var oldCallback = this._callbacks[functionName];
this._callbacks[functionName] = function() {
oldCallback();
handler();
}
} else {
this._callbacks[functionName] = function() {
handler();
}
}
};
}
var car = new Car();
car.setColor('blue');
car.addListener('setColor', function() { console.log("This is listener # 1"); });
car.setColor('green');
car.addListener('setColor', function() { console.log("This is listener # 2"); });
car.setColor('orange');
输出:
>>> setColor to blue
>>> setColor to green
This is listener # 1
>>> setColor to orange
This is listener # 1
This is listener # 2
【问题讨论】:
标签: javascript function callback listener