2016-02-18 2 views
0

Это то, что я хотел бы сделать:Передача функции в качестве свойства объекта

function genTxnId(id) { 
    return id; 
} 

var ws; 
ws = new funcB('A', {evaluator: genTxnId(25)}); 

Но я считаю, что когда-то он переходит в funcB, свойство «оценщик» из переданных в объекте оцениваются, прежде чем в функцию. Есть ли способ сохранить его как genTxnId (25), пока он не будет использован в funcB.

Я знаю, что делать это будет держать его как функцию:

var funcA = function(b) { return b;

сохранить бы его как функцию, но тогда я не смогу передать в аргументе б.

+0

'genTxnId.bind (окно, 25)' –

+0

Удивительная благодарность! – ron

ответ

0

Используя .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, чтобы ссылаться на вновь созданный объект, который может показаться более интуитивным (хотя это и невозможно, насколько мне известно). Но в общем, вам не нужно это делать, поэтому вы можете пройти в любом старом объекте. Вы могли бы даже пройти null, если вы никогда не будете использовать this внутри этой функции, то есть getTxnId.bind(null, 25).

Смежные вопросы