我会将我以前的 js 代码移动到更多的 OOP 风格。这是代码。
function addEvent( obj, type, fn ) {
if ( obj.attachEvent ) {
obj['e'+type+fn] = fn;
obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
obj.attachEvent( 'on'+type, obj[type+fn] );
} else
obj.addEventListener( type, fn, false );
}
function test() {
}
test.prototype = {
init: function () {
addEvent(document, 'mousedown', this.displaydown);
},
displaydown : function(e){
document.getElementById('mydiv').innerHTML = "down";
addEvent(document, 'mousemove', this.displaymove);
},
displaymove : function(e){
document.getElementById('mydiv').innerHTML = "move";
}
}
var test0 = new test();
test0.init()
mousedown 后我无法添加 mousemove 事件
addEvent(document, 'mousemove', this.displaymove);
但是如果我写像这样的内联样式
addEvent(document, 'mousemove', function(e){
document.getElementById('mydiv').innerHTML = "move";
});
没关系。看起来这两个代码做同样的事情。为什么有区别?谢谢!
编辑,
经过2个晚上的努力,我终于解决了这个问题。感谢约翰维的启发。
此关键字出现错误。如果是对象,this 指的是窗口而不是对象本身。解决方案是我在开始时定义了全局参数me (me = this)。现在好啦。