将函数作为对象属性传递

时间:2016-02-18 08:25:41

标签: javascript

这就是我想做的事情:

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。

1 个答案:

答案 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绑定到的对象作为其第一个参数。这意味着您无法依赖thisgetTxnId的值来引用新创建的对象,这可能看起来更直观(尽管根据我的知识是不可能的)。但总的来说,你不需要这样做,所以你可以传入任何旧的对象。如果您在该功能中未使用null,即this,您甚至可以通过getTxnId.bind(null, 25)