为什么需要JavaScript bind()?
示例1中的问题是“ this”引用了全局名称而不是myName对象。
我了解在将this的值设置为特定对象时使用bind()的方法,因此它可以解决示例1中的问题,但是为什么首先会出现此问题?这仅仅是创建Javascript的方式吗?
我还想知道为什么示例3解决了这个问题,以及示例2和示例3之间的区别。
this.name = "John"var myName = {
name: "Tom",
getName: function() {
return this.name
}
}
var storeMyName = myName.getName; // example 1
var storeMyName2 = myName.getName.bind(myName); // example 2
var storeMyName3 = myName.getName(); // example 3
console.log("example 1: " + storeMyName()); // doesn't work
console.log("example 2: " + storeMyName2()); // works
console.log("example 3: " + storeMyName3); // works
回答:
为什么需要JavaScript bind()?
值this
是决定 如何 一个功能 叫 。如果是 您
调用该函数,则通常无需使用.bind
,因为您可以控制调用函数的方式,因此也可以控制其this
值。
但是,通常 不是 您调用函数。函数作为回调和事件处理程序传递给其他函数。他们被称为 其它 的代码,你有无法控制 如何
调用该函数,因此无法控制this
将引用。
如果您的函数需要this
设置为特定值,而您又不是调用该函数的人,则需要.bind
将该函数设置为特定this
值。
换句话说:.bind
允许您设置的值,this
而不是调用它 现在 。
这是引用/调用函数的比较:
+-------------------+-------------------+ | | |
| time of | time of |
|function execution | this binding |
| | |
+-------------------+-------------------+-------------------+
| | | |
| function object | future | future |
| f | | |
| | | |
+-------------------+-------------------+-------------------+
| | | |
| function call | now | now |
| f() | | |
| | | |
+-------------------+-------------------+-------------------+
| | | |
| f.call() | now | now |
| f.apply() | | |
| | | |
+-------------------+-------------------+-------------------+
| | | |
| f.bind() | future | now |
| | | |
+-------------------+-------------------+-------------------+
我还想知道为什么示例3解决了这个问题,以及示例2和示例3之间的区别。
示例1/2和3没什么不同。storeMyName
和storeMyName2
包含 的功能
,这是所谓的未来,而storeMyName3
包含调用的结果myName.getName()
的那一刻 。
以上是 为什么需要JavaScript bind()? 的全部内容, 来源链接: utcz.com/qa/407256.html