[英]Passing a function as an object property
這是我想做的:
function genTxnId(id) {
return id;
}
var ws;
ws = new funcB('A', {evaluator: genTxnId(25)});
但是我發現,一旦進入funcB,傳入的對象的“ evaluator”屬性將在進入函數之前進行評估。 無論如何,在funcB中使用它之前,請將其保留為genTxnId(25)。
我知道這樣做會使其保持功能:
var funcA = function(b) { return b;
會將其保留為一個函數,但隨后我將無法傳遞參數b。
使用.bind()
,可以將函數的參數綁定到特定的值,而無需調用它。 .bind()
將返回一個函數,您可以在其他地方調用該函數,並傳遞尚未綁定的其余參數。
function getTxnId (id) {
return id;
}
function funcB (str, obj) {
obj.evaluator();
}
var ws = new funcB('A', {
evaluator: genTxnId.bind(this, 25)
});
一個需要注意的是,結合作為它的第一個參數要將對象this
將被綁定。 這意味着您不能依靠getTxnId
的this
值來引用新創建的對象,這似乎更直觀(盡管據我所知不可能)。 但是通常,您不需要這樣做,因此您可以傳入任何舊對象。 如果您永遠不會在該函數內使用this
函數,甚至可以傳遞null
,即getTxnId.bind(null, 25)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.