[英]javascript variable scope across functions jQuery involved
這是我無法工作的-在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();
我可以將該事件傳遞給假定的類實例嗎,還是沒有辦法完成?
我還要提一下,我在這里試圖避免使用全局范圍變量。
二 三件事:
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));
}
我建議閱讀MDC-使用對象 。
當你傳遞的方法等this.mouseMove
作為一個回調函數,它不再依賴於實例-所以this
將是全局對象。 要修復作用域,您可以在閉包中傳遞實例,如下所示:
function myClass (x,y) {
var mouseX=x;
var mouseY=y;
var that = this;
$(document).mousemove(function() { that.mouseMove() });
}
嘗試:
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();
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才能在構造函數中實例化
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.