调用应用并绑定。以及它们有何不同。
让我们使用任何日常术语来学习电话并申请。
您有三辆your_scooter , your_car and your_jet
以相同的机制(方法)启动的汽车。我们automobile
使用方法创建了一个对象push_button_engineStart
。
var your_scooter, your_car, your_jet;
var automobile = {
push_button_engineStart: function (runtime){
console.log(this.name + "'s" + ' engine_started, buckle up for the ride for ' + runtime + " minutes");
}
}
让我们了解何时调用并申请使用。让我们假设您是一名工程师,并且已经拥有your_scooter
,your_car
并且your_jet
没有push_button_engine_start,并且您希望使用第三方push_button_engineStart
。
如果您运行以下代码行,它们将给出错误。为什么?
//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();
automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);
因此,上面的示例成功地为your_scooter,your_car,your_jet提供了来自汽车对象的功能。
让我们更深入地研究
这里将拆分上面的代码行。
automobile.push_button_engineStart
正在帮助我们获得正在使用的方法。
此外,我们使用点符号使用Apply或call。
automobile.push_button_engineStart.apply()
现在应用并调用接受两个参数。
- 语境
- 论点
因此,这里我们在代码的最后一行中设置了上下文。
automobile.push_button_engineStart.apply(your_scooter,[20])
通话和申请之间的区别仅在于apply接受数组形式的参数,而call则可以接受逗号分隔的参数列表。
什么是JS Bind函数?
绑定函数基本上是绑定某些内容的上下文,然后将其存储到变量中以供以后执行的函数。
让我们进一步完善前面的示例。先前我们使用一种属于汽车对象的方法并将其用于装备your_car, your_jet and your_scooter
。现在让我们想象一下,我们想要单独给出一个单独的名称,push_button_engineStart
以便在希望执行的任何后续阶段分别启动汽车。
var scooty_engineStart = automobile.push_button_engineStart.bind(your_scooter);
var car_engineStart = automobile.push_button_engineStart.bind(your_car);
var jet_engineStart = automobile.push_button_engineStart.bind(your_jet);
setTimeout(scooty_engineStart,5000,30);
setTimeout(car_engineStart,10000,40);
setTimeout(jet_engineStart,15000,5);
还是不满意?
让我们清楚地将其作为泪珠。该实验了。我们将返回调用并应用函数应用程序,并尝试将函数的值存储为引用。
下面的实验失败了,因为调用和应用立即被调用,因此,我们从没有进入将引用存储在变量中的阶段,在该变量中绑定函数会窃取表演
var test_function = automobile.push_button_engineStart.apply(your_scooter);