如何将一个函数的另一个对象的属性传递给一个函数,并在javascript中调用它?

多态王子

如果我在Javascript中有一个对象,并且其属性之一是一个函数:

function cow() {

    this.timesMooed = 0;

    this.sayMoo = function () {
        this.timesMooed++;
        return "moo";
    };
}

假设我还有另一个函数,它将某些函数作为参数,调用它并记录结果:

var actionResults = [];
function doAction(action) {
    actionResults.push(action());
}

现在让我们将其付诸实践,看看会发生什么:

var jerry = new cow();
doAction(jerry.sayMoo);
console.log(actionResults);
// Outputs ["moo"] -this is correct
console.log(jerry.timesMooed);
// Outputs 0 -uh oh

我如何传递函数,以便它Jerry正在运行该函数?

马克·迈耶

当您将引用传递给函数doAction,然后使用进行调用时action(),调用上下文将发生变化,这就是确定的值的原因this您需要使用bind来将thislocked的值保持jerry

function cow() {
    this.timesMooed = 0;
    this.sayMoo = function () {
        this.timesMooed++;
        return "moo";
  }
}

var actionResults = [];
function doAction(action) {
    actionResults.push(action());
}

var jerry = new cow();
// use bind, which makes a function with `this` set properly
doAction(jerry.sayMoo.bind(jerry));

console.log(actionResults);
console.log(jerry.timesMooed);

或者,您可以使用按词法=>绑定的箭头函数this

function cow() {
    this.timesMooed = 0;
    // use arrow function here instead
    this.sayMoo = () => {
        this.timesMooed++;
        return "moo";
  }
}

var actionResults = [];
function doAction(action) {
    actionResults.push(action());
}

var jerry = new cow();
// no need to bind() now
doAction(jerry.sayMoo);

console.log(actionResults);
console.log(jerry.timesMooed);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将一个函数作为参数传递给Perl中的另一个函数,然后调用它?

如何将函数作为参数传递给 Javascript 中的另一个函数?

如何将一个函数的值传递给另一个函数?

C ++:如何将一个对象传递给另一个对象构造函数?

如何将函数数组作为参数传递给另一个函数,并在以后的函数中调用这些函数

如何将活动名称传递给函数并在另一个文件中定义函数

如何将变量传递给在另一个函数中声明的函数

如何将另一个函数作为变量传递给R中的函数?

如何将编写的对象传递给另一个类的构造函数?

在shell中的另一个函数内部调用参数时如何将参数传递给函数

如何将一个组件中的props onClicked函数传递给另一个组件

如何将 HTML 控件传递给另一个 javascript 函数

如何将$(this)变量传递给另一个函数javascript

如何将&rest参数传递给emacs lisp中的另一个函数?

如何将BufReader传递给rust中的另一个函数?

如何将未知变量传递给R中的另一个函数

如何将函数传递给函数并在 kotlin 的另一个函数中访问传递函数的 lambda 值?

如何将一个函数作为参数传递给另一个函数?

如何将字符串变量从一个函数传递给另一个函数?

如何将变量从一个函数传递给另一个函数

如何将lambda从一个函数传递给另一个函数作为参数?

R-如何将一个函数作为参数传递给另一个函数?

如何将值从一个函数传递给另一个函数?

如何将变量值从一个函数传递给另一个函数

如何将变量从一个函数传递给另一个函数?

如何将对象函数的实例传递给另一个函数?

如何将matplotlib的plt对象函数传递给python中的另一个方法?

如何将列表中的对象传递给另一个控制器索引函数?

我如何将一个函数内的int指针传递给另一个函数,并在那里进行操作?