2012-01-16 77 views
0

給出一個函數,就像這樣:jQuery:添加函數self到數組?

var allev = new Array(); 
function events(index) { 
    allev[index] = $(this); // doesn't work 
} 

有沒有辦法得到這個在上面的方式工作,還是我總是受到以下限制:

var allev = new Array(); 
function events(index) { 
    // ... 
} 

function() { // out of scope, so make objects global 
    var count = allev.length; 
    var inst = events(count); 
    allev[count] = inst; 
} 

如果有任何更佳的選擇比上面兩個,我也對這些開放。

+3

首先,當您調用'$(this)'時,據我所知,它不涉及任何內容。 – 2012-01-16 15:40:21

+0

@Ken,'$(this)'指的是'函數事件(索引)'... – 2012-01-16 15:41:30

+0

所以你試圖把一個函數放入一個數組? O. o – 2012-01-16 15:42:24

回答

0

。它正是我想要的,沒有一種方法可以讓this正常工作。

allev[index] = $.proxy(function() { return this; }, this); 
2

當您在JavaScript中調用函數(而不是方法)時,this是全局對象,或者在嚴格模式下爲undefined。所以使用this就像你以上將永遠不會工作。

可以做到這一點:

function events(index) { 
    arr[index] = arguments.callee; 
    alert("Hi"); 
} 

,但將休息如果你曾經使用嚴格模式(這實際上是一個很好的主意)。

你也可以這樣做:

function events(index) { 
    allev[index] = this; // will work if you call with apply or call 
} 

當且僅當,你永遠只能調用events這樣的:

events.call(events, 12); 

callapply都允許你指定什麼this會等於函數調用的內部。不同的是,call期望所有參數被列出,而apply期望所有參數都被傳遞到一個數組中。所以,我決定尋找更多一點到jQuery的API,我發現$.proxy上面的將相當於

events.apply(events, [12]); 

DEMO