为什么需要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没什么不同。storeMyNamestoreMyName2包含 的功能

,这是所谓的未来,而storeMyName3包含调用的结果myName.getName()的那一刻


以上是 为什么需要JavaScript bind()? 的全部内容, 来源链接: utcz.com/qa/407256.html

回到顶部