obj.func(arg)和obj.func.bind(obj,arg)之间的区别

时间:2016-11-15 09:21:11

标签: javascript reactjs

我刚刚在一段React代码(名称已更改)中遇到了以下结构:

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

据我所知,bind只是执行相应的函数,函数的this设置为第一个参数,并将更多参数传递给它。 由于func已经是我们希望成为this的对象的属性,因此似乎this.func(arg)会导致相同的行为。

我没有看到相同功能似乎更复杂的语法背后的动机。 是否存在obj.func(arg)obj.func.bind(obj, arg)相比表现不同的上下文?或者是否存在我不知道的非技术方面(例如惯例,一致性)?

2 个答案:

答案 0 :(得分:2)

关键区别在于<script> function myMap() { var lat = 52.4283381; var lng = -1.601519; var myLatLng = { lat: 52.428381, lng: -1.601519 }; var map = new google.maps.Map(document.getElementById('map'), { zoom: 5, center: new google.maps.LatLng(lat, lng) }); } </script> <script> window.data = @(Html.Raw(js.Serialize(ViewData.Model))); var markers = []; for(i = 0; i < window.data.length; i++) { markers.push(new google.maps.Marker ({ position: new google.maps.LatLng (52.428381 , -1.601519), map: map, title: "" + i, })); } </script> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBfvqLwEOTU3oFoiJOmmloYJFYUA801lF8&callback=myMap"></script> 执行函数,而obj.func(arg) 不执行函数。它只会确保在函数实际执行后func.bind(obj, arg)绑定到this

见这里:

obj

答案 1 :(得分:2)

除了设置this上下文外,Function.prototype.bind还允许您这样做 设置调用函数时前缀为参数的参数。 bind函数的返回值不是调用函数的结果,而是可以使用绑定的this上下文调用的函数,以及绑定函数时指定的前置参数。 / p>

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);