2012-01-16 76 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