我对命令模式教程中的这一片段感到困惑,
这是什么意思return carManager[name] && carManager[name].apply( carManager, [].slice.call(arguments, 1) );
我也可以理解它是否是carManager.execute(“ buyVehicle”),然后carManager [“ buyVehicle”]可以调用该函数,但是carManager [buyVehicle“,” Ford Escort“,” 453543“]呢?
(function(){
var carManager = {
// request information
requestInfo: function( model, id ){
return "The information for " + model + " with ID " + id + " is foobar";
},
// purchase the car
buyVehicle: function( model, id ){
return "You have successfully purchased Item " + id + ", a " + model;
},
// arrange a viewing
arrangeViewing: function( model, id ){
return "You have successfully booked a viewing of " + model + " ( " + id + " ) ";
}
};
})();
carManager.execute = function ( name ) {
return carManager[name] && carManager[name].apply( carManager, [].slice.call(arguments, 1) );
};
carManager.execute( "buyVehicle", "Ford Escort", "453543" );
最佳答案
return carManager[name] && carManager[name].apply( carManager, [].slice.call(arguments, 1) );
如果carManager中存在功能carManager [name],则执行该功能。
carManager[name].apply( carManager, [].slice.call(arguments, 1) );
.apply()
用于在其他或同一对象上调用某个功能。它以对象为第一参数,以参数为第二参数。您可以提供任何对象作为第一个参数,只要该函数确实导致该对象的现有属性发生任何更改。例如,这是相同的。carManager.execute = function ( name ) {
return carManager[name] && carManager[name].apply( {}, [].slice.call(arguments, 1) );
};
码:
[].slice.call(arguments, 1);
.call()
确实具有与apply()
相同的功能。它采用Array对象的slice函数,然后将其调用到其他一些对象上,这次是在arguments(object)数组上。 slice
返回数组的一部分。在这种情况下,它只是避免了arguments数组中的第一个元素。即它使数组没有第一个元素carManager.execute( "buyVehicle", "Ford Escort", "453543" );
它调用了invoke函数。第一个参数提供函数的键。第二个和第三个参数提供必须传递到carManager对象中存在的方法中的实际数据。这就是参数数组被切片的原因。
关于javascript - 使用&&返回函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49466072/