为什么JavaScriptBIND()是必要的?示例1中的问题是“此”引用全局名称,而不是myName对象。我理解如何使用BIND()将它的值设置为特定的对象,因此它解决了示例1中的问题,但是为什么首先会出现这个问题呢?这仅仅是Javascript创建的方式吗?我还想知道为什么示例3解决了这个问题,以及示例2和示例3之间的区别。this.name = "John"var myName = { name: "Tom", getName: function() { return this.name }}var storeMyName = myName.getName; // example 1var storeMyName2 = myName.getName.bind(myName); // example 2var storeMyName3 = myName.getName(); // example 3console.log("example 1: " + storeMyName()); // doesn't workconsole.log("example 2: " + storeMyName2()); // worksconsole.log("example 3: " + storeMyName3); // works
3 回答

Smart猫小萌
TA贡献1911条经验 获得超7个赞
这个
bind()
方法创建一个新函数,当调用该函数时,它的this关键字设置为提供的值,在调用新函数时,在任何提供的参数之前都有给定的参数序列。
所以,当你执行var storeMyName = myName.getName;
第一次,它把全球name
(这个名字=“约翰”)
当你使用bind()
函数,它开始引用当前闭包中定义的名称(本例中为myName),从而打印Tom
第三次,因为函数是立即调用的,所以它的作用域在自己的本地对象中,因此在闭包中打印值。
添加回答
举报
0/150
提交
取消