<分区>
this.a()
a.call(this)
据我了解:
- 在这两种情况下,上下文 都是
this
。 - 只有当
a()
是this
的方法时才能使用第一个选项。 - 在搜索代码库时,调用同一事物的两个选项会使事情变得更加复杂。
MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call
还有什么区别吗? 使用这两个选项时,您的最佳做法是什么?
标签 javascript
<分区>
this.a()
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通过这样做...
call
和 apply
当你想使用来自另一个“类”的方法但带有你的 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 - 如何使用 Javascript 更改元素的宽度?
javascript - Base64 太大,无法在浏览器中打开,有其他替代方案吗?
javascript - 当响应字段包含一个子项时,node-soap 强制数组
javascript - Angular 中的 Controller 级安全性
javascript - 在javascript中获取json结构中的搜索方式