2016-11-15 26 views
0

我对面就有一个下列结构进来一块阵营代码(名称变更):差(ARG)和obj.func.bind(OBJ,ARG)

<MyActionComponent callback={this.func.bind(this, arg)}> 

从什么据我所知,bind只是将函数的this设置为第一个参数并将更多参数传递给它。 既然func已经是我们想要成为的对象的属性this,看起来this.func(arg)会导致相同的行为。

我看不到背后的动机,看起来像是一个更复杂的相同功能的语法。 在obj.func(arg)的行为与obj.func.bind(obj, arg)相比有什么不同吗?或者我没有意识到非技术方面的问题(例如惯例,一致性)?

+1

你的回调使用这里面它和回调通常被称为与窗口的背景,但在这里我们要确保它被调用的MyActionComponent –

+0

@SharathBangera上下文:如果'这是窗口,我们仍然会使用上面的代码在窗口的上下文中调用它。 –

+0

您在第一次加载时调用该函数。当它假设运行在一个要触发的事件上时 –

回答

2

关键的区别是,obj.func(arg)执行功能而func.bind(obj, arg)不执行的功能。一旦函数get被实际执行,它只确保this将被绑定到obj

在这里看到:

var obj = { 
    fooFn: function() {console.log("this = ", this)} 
} 

obj.fooFn() // => prints "this = [Object]" 

var boundFn = obj.fooFn.bind("bar") 
boundFn() // => prints "this = 'bar'" 
+0

嗯,它只是创建一个带有绑定上下文和可能参数的函数的“派生”。 Idk我怎么会错过这个......谢谢。 –

2

除了设置this背景下,Function.prototype.bind,您还可以到预先计划的参数,当函数被调用 设定参数。 bind函数的返回值不是调用该函数的结果,而是可以使用绑定的上下文和前置参数调用的函数。

const addStuff = function(a, b) { 
 
    this.sum += a; 
 
    this.sum += b; 
 
}; 
 

 
const resultA = { sum: 0 }; 
 
const add_A_and_B = addStuff.bind(resultA); 
 
add_A_and_B(1, 2); 
 

 
console.log("add_A_and_B(1, 2):", resultA); 
 

 
const resultB = { sum: 0 }; 
 
const add_5_and_B = addStuff.bind(resultB, 5); 
 
add_5_and_B(2); 
 

 
console.log("add_5_and_B(2):", resultB);

+0

谢谢,我不知何故错过了它返回一个函数,而不是执行它并返回结果。现在回调也变得更有意义,因为它是一个实际的功能。 –