this.a()vs a.call(this)在javascript中

Lav*_*dor 5 javascript

  1. this.a()
  2. a.call(this)

我认为:

  • 在这两种情况下,背景都将是this.
  • 当只能用第一个选项a()是一个方法this.
  • 在搜索代码库时,调用同一个东西的两个选项会使事情变得更复杂.

MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

还有其他区别吗?使用这两个选项时,您的最佳做法是什么?

Hol*_*olt 5

不要a.call(this)在你可以做的时候使用this.a(),这会让事情变得更难理解,而AFAIK你没有通过这样做获得任何东西......

callapply当你想使用的方法从其他"类",但你是有用的this参数,如:

var nodes = document.querySelectorAll('a') ;
Array.prototype.forEach.call(nodes, callback) ;
Run Code Online (Sandbox Code Playgroud)

不能使用nodes.forEach,因为nodesNodeList不是一种Array,因此没有一个forEach方法,但你可以做到以上.

另一个用途call是当你想this在回调方法上强制实例时(例如,当你创建一个插件时).

plugin.doSomething ('#id', function () {
    // I would like 'this' to reference my HTMLElement here
}) ;
Run Code Online (Sandbox Code Playgroud)

所以doSomething你可以这样做:

function doSomething (selector, callback) {
    var e = document.querySelector (selector) ;
    // Whatever... 
    callback.call(e) ;
}
Run Code Online (Sandbox Code Playgroud)

  • 还有一种情况是"apply"与未知数量的参数一起工作.比如`arr = [1,2,3,4]; maximum = Math.max.apply(Math,arr);` (2认同)