簡體   English   中英

如何存儲包含參數的JS函數引用

[英]How to store a JS function reference with an argument included

這篇Stack文章展示了如何將參數作為.on()綁定過程的一部分傳遞給JavaScript函數引用。 我想將參數數組內的引用存儲在一個對象中。


我在文件頂部定義了一些函數:

function func1() {
     $('.result p').text('func1 success');
}
function func2() {
     $('.result p').text('func2 success');
}
function func3(someNum) {
     $('.result p').text('func3 success, someNum is ' + someNum);
}

我后來在同一個文件中有一個對象:

objects[0] = {
    name : "Object 1",
    funcs : [
        func1,
        func2,
        func3// This is where I want to pass an arg, someNum
        ]
};

當某個事件發生時,我動態創建3個按鈕,每個按鈕綁定到對象數組中的這3個函數之一:

// append a button for each func
funcs.forEach(function(thisFunc) {
    $('.buttons').append('<button id="' +
        thisFunc.name + '">Run ' +
        thisFunc.name + '</button>');
    // bind that button to that func
    $('#' + thisFunc.name).click(thisFunc);
});

這一切都適用於func1func2但我找不到任何關於如何將此場景中的參數傳遞給func3類的函數的文檔。 理想情況下,我想將它存儲在數組中,如下所示:

funcs : [
    func1,
    func2,
    func3(5)
    ]

但是這會調用函數(你可以將(5)添加到下面粘貼的Fiddle中以查看其中的操作)。 我想綁定到func3函數,傳遞參數someNum = 5 ,但只調用函數onclick

演示:

這個小提琴是一個工作演示,沒有將參數傳遞給func3 ,這是我不知道該怎么做的部分。

另外,如果我的問題在於我的綁定方式,動態創建按鈕或存儲對函數的引用,請告訴我。 我沒有和這個代碼結構結合,這只是構建它的方式。

使用Function.prototype.bind方法創建一個新函數:

funcs : [
    func1,
    func2,
    func3.bind(null, 5)
]

bind將使用將在其中傳遞的參數創建一個新函數。

另一種方法是創建一個匿名函數,檢查John Bledsoe的答案。

這應該工作我相信:

objects[0] = {
    name : "Object 1",
    funcs : [
        func1,
        func2,
        function() { return func3(5); }
        ]
};

綁定到按鈕時,您也可以同時使用apply和call

func.call(null, 5); '5 is just an example, give whatever param you want

要么

func.apply(null, [5]);

通過'綁定',我的意思是onclick =“func [3] .call(...)”in html或$(someobject).click(function(){func [3] .call(...)})。

特別是對於我的好朋友Lye Fish http://jsfiddle.net/d96ev3c8/8/ ,這將是一個小提琴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM