明确的“this”绑定:.bind方法如何工作?

时间:2016-05-20 11:15:22

标签: javascript

所以我一直在努力学习JS上下文并理解“this”关键字。这是我一直在使用的一些代码:

var addNumbers = function(num1, num2){
  console.log(num1+num2);
}

var newAdd = addNumbers.bind(this,1,2);

newAdd();

以上记录值3,应该如此。但是,如果我在没有“this”关键字的情况下调用addNumbers.bind:

var newAdd = addNumbers.bind(1,2);

newAdd()调用返回NaN。为什么这个NaN会发生?而且,我只是通过尝试将“this”作为第一个参数加入解决方案,而不一定是出于直觉。为什么将“this”作为参数传递?在这种情况下,“this”代表什么背景?感谢。

编辑:此问题与任何与.bind()相关的问题都不同,因为它不是要求对此函数进行一般性说明。我问的是具体的用例,需要一个具体的答案。其他建议的副本更加通用,并且对不同类型的答案更加开放。

2 个答案:

答案 0 :(得分:3)

.bind用于将“this”上下文分配给另一个对象

在您的情况下,.bind(1,2)将“this”分配为1且参数为num1=2num2=undefined,而且2 + undefined是JS中的NaN

如果您在对象中有一个函数,请说obj.func(asd)this将在函数func中为obj。如果您想更改this的上下文,可以使用bindapply(就像绑定一样,但它直接调用该函数,而不是创建一个新函数)

答案 1 :(得分:0)

简单地说,因为Function#bind function总是将函数的this上下文作为第一个参数:

  

fun.bind(thisArg [,arg1 [,arg2 [,...]]])

在您的示例中,您将1作为this的值传递(这不是无效的,但可能不是您尝试做的事情):

var newAdd = addNumbers.bind(1,2);

因此,如果您不需要this参数,则可以通过null

var newAdd = addNumbers.bind(null, 1, 2);