这就是我想做的事情:
function genTxnId(id) {
return id;
}
var ws;
ws = new funcB('A', {evaluator: genTxnId(25)});
但我发现,一旦进入funcB,"评估员"在进入函数之前评估传入的对象的属性。无论如何都要将它保持为genTxnId(25),直到它在funcB中使用。
我知道这样做会使它成为一个功能:
var funcA = function(b) { return b;
将其作为一个功能保留,但后来我无法传递参数b。
答案 0 :(得分:0)
使用.bind()
,您可以将函数的参数绑定到特定值而无需调用它。 .bind()
将返回一个函数,然后您可以在其他地方调用,传入尚未被绑定的其余参数。
function getTxnId (id) {
return id;
}
function funcB (str, obj) {
obj.evaluator();
}
var ws = new funcB('A', {
evaluator: genTxnId.bind(this, 25)
});
一个警告是bind将this
绑定到的对象作为其第一个参数。这意味着您无法依赖this
中getTxnId
的值来引用新创建的对象,这可能看起来更直观(尽管根据我的知识是不可能的)。但总的来说,你不需要这样做,所以你可以传入任何旧的对象。如果您在该功能中未使用null
,即this
,您甚至可以通过getTxnId.bind(null, 25)
。