如何传递对象上下文

时间:2017-08-02 17:27:05

标签: javascript

我创建了下面的函数来获取点击次数。它有效,但问题是当它调用func时,func没有clickCount所具有的对象上下文(即this)。

在创建此问题时,StackOverflow显示了以下答案的链接,这几乎是我想要的,除了该函数是使用上下文(或?)定义的。我想在clickCount处理程序中应用上下文

How to pass object context to an anonymous function?

如何在clickCount调用func时传递此功能?

var clickCountObj = { //this is in the global context
  'clickTime' : 400
};


$.fn.clickCount = function (func) {
  $(this).click(function(e) {
    if (!clickCountObj.prevClickTime || clickCountObj.prevClickTime < Date.now() - clickCountObj.clickTime) {
      clickCountObj.clickCnt = 1;
    } else {
      clickCountObj.clickCnt = clickCountObj.clickCnt + 1;
    }
    clickCountObj.prevClickTime = Date.now();
    func(clickCountObj.clickCnt, e);
  });
}

1 个答案:

答案 0 :(得分:1)

您正在寻找的是call。它允许您调用函数并将this设置为等于第一个参数。

function displayName(greeting) {
  console.log(`${greeting}, I am ${this.first} ${this.last}`);
}

let me = {
  first: 'Mike',
  last: 'C'
};

displayName.call(me, 'Hello');

如果您希望将其他参数作为数组传递,也可以使用apply

function displayName(greeting) {
  console.log(`${greeting}, I am ${this.first} ${this.last}`);
}

let me = {
  first: 'Mike',
  last: 'C'
};

displayName.apply(me, ['Hello']);

特别针对您的情况,请尝试

func.call(this, clickCountObj.clickCnt, e);