javascript - javascript 中的 this.a() 与 a.call(this)

标签 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

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

最佳答案

当您可以执行 this.a() 时,请不要使用 a.call(this),这会使事情更难理解,并且您不会获得 AFAIK通过这样做...

callapply当你想使用来自另一个“类”的方法但带有你的 this 参数时很有用,例如:

var nodes = document.querySelectorAll('a') ;
Array.prototype.forEach.call(nodes, callback) ;

您不能使用 nodes.forEach 因为 nodes 是一个 NodeList 而不是 Array 因此没有 forEach 方法,但您可以执行上述操作。

call 的另一个用途是当您想要在回调方法上强制执行 this 实例时(例如,当您创建插件时)。

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

所以在 doSomething 中你可以做这样的事情:

function doSomething (selector, callback) {
    var e = document.querySelector (selector) ;
    // Whatever... 
    callback.call(e) ;
}

关于javascript - javascript 中的 this.a() 与 a.call(this),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34390644/

相关文章:

javascript - Redux - 如何记录应用程序状态?

javascript - JSC_NOT_FUNCTION_TYPE 谷歌闭包编译器

javascript - OnClick 之后隐藏按钮

javascript - 如何使用 Javascript 更改元素的宽度?

javascript - Base64 太大,无法在浏览器中打开,有其他替代方案吗?

javascript - 当响应字段包含一个子项时,node-soap 强制数组

javascript - Angular 中的 Controller 级安全性

javascript - 在javascript中获取json结构中的搜索方式

javascript - 在 Phaser 中销毁 Sprite

PHP exec 启动带参数的 cmd 窗口