【发布时间】:2010-04-22 13:23:54
【问题描述】:
我正在尝试为鼠标行为编写一个简单的包装器。这是我当前的代码:
function MouseWrapper() {
this.mouseDown = 0;
this.OnMouseDownEvent = null;
this.OnMouseUpEvent = null;
document.body.onmousedown = this.OnMouseDown;
document.body.onmouseup = this.OnMouseUp;
}
MouseWrapper.prototype.Subscribe = function (eventName, fn) {
// Subscribe a function to the event
if (eventName == 'MouseDown') {
this.OnMouseDownEvent = fn;
} else if (eventName == 'MouseUp') {
this.OnMouseUpEvent = fn;
} else {
alert('Subscribe: Unknown event.');
}
}
MouseWrapper.prototype.OnMouseDown = function () {
this.mouseDown = 1;
// Fire event
$.dump(this.OnMouseDownEvent);
if (this.OnMouseDownEvent != null) {
alert('test');
this.OnMouseDownEvent();
}
}
MouseWrapper.prototype.OnMouseUp = function () {
this.mouseDown = 0;
// Fire event
if (this.OnMouseUpEvent != null) {
this.OnMouseUpEvent();
}
}
从我收集的信息看来,在 MouseWrapper.prototype.OnMouseUp 和 MouseWrapper.prototype.OnMouseDown 中,关键字“this”并不意味着 MouseWrapper 的当前实例,而是其他东西。而且它没有指向我的实例而是如何解决问题是有道理的?
我想正确解决问题我不想使用肮脏的东西。
我的想法: * 使用单例模式(鼠标毕竟只是一个) * 以某种方式将我的实例传递给 OnMouseDown/Up - 如何?
感谢您的帮助!
【问题讨论】:
标签: javascript events object this