我刚刚在一段React代码(名称已更改)中遇到了以下结构:
<MyActionComponent callback={this.func.bind(this, arg)}>
据我所知,bind
只是执行相应的函数,函数的this
设置为第一个参数,并将更多参数传递给它。
由于func
已经是我们希望成为this
的对象的属性,因此似乎this.func(arg)
会导致相同的行为。
我没有看到相同功能似乎更复杂的语法背后的动机。
是否存在obj.func(arg)
与obj.func.bind(obj, arg)
相比表现不同的上下文?或者是否存在我不知道的非技术方面(例如惯例,一致性)?
答案 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);