这是我无法工作的 - 在mouseMove this.mouseX是未定义的。我需要mousemove事件中的mouseX和mouseY(代码中的e.pageX)。
function myClass () {
var mouseX=x;
var mouseY=y;
$(document).mousemove(this.mouseMove);
}
myClass.prototype.mouseMove = function(e){
this.mouseX=e.pageX;//not a good idea but you can alert this
}
var a=new myClass();
我可以将该事件传递给假定的类实例,或者无法完成它吗?
我还应该提一下,我试图在这里避免全局范围变量。
答案 0 :(得分:1)
两个三件事:
var mouseX
仅声明myClass函数的本地变量 。您必须使用this.mouseX
声明实例的属性(this
引用当前实例):
function myClass () {
this.mouseX=x; // where do x and y come from?
this.mouseY=y;
//...
}
其次,请确保将x
和y
作为参数传递给构造函数。否则你会收到一个错误(如果它们没有在更高的范围内定义,但这对我来说似乎没用)。
第三,如果您只是将this.mouseMove
作为事件处理程序传递,则在事件处理程序中,this
将引用window
而不引用myClass
实例。使用$.proxy
显式设置回调的上下文:
function myClass(x, y) {
this.mouseX=x;
this.mouseY=y;
$(document).mousemove($.proxy(this.mouseMove, this));
}
答案 1 :(得分:0)
当您将this.mouseMove
之类的方法作为回调函数传递时,它不再与实例绑定 - 因此this
将成为全局对象。要修复范围,可以在闭包中传递实例,如下所示:
function myClass (x,y) {
var mouseX=x;
var mouseY=y;
var that = this;
$(document).mousemove(function() { that.mouseMove() });
}
答案 2 :(得分:0)
尝试:
function myClass (x,y) {
var mouseX=x;
var mouseY=y;
var $this = this;
$(document).mousemove(function(){$this.mouseMove()});
}
myClass.prototype.mouseMove = function(e){
this.mouseX=e.pageX;//not a good idea but you can alert this
}
var a=new myClass();
答案 3 :(得分:0)
function myClass () {
this.mouseX=x;
this.mouseY=y;
$(document).mousemove(this.mouseMove);
}
myClass.prototype.mouseMove = function(e){
this.mouseX=e.pageX;//not a good idea but you can alert this
}
var a=new myClass();
您需要在构造函数
中使用this关键字而不是var来实例化