javascript - 返回函数 &&?

标签 javascript

我对命令模式教程中的这段代码感到困惑,

这是什么意思

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[name] 存在于 carManager 中,则执行该函数。

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 返回数组的一部分。在这种情况下,它只是避免参数数组中的第一个元素。即它创建没有第一个元素的数组

carManager.execute( "buyVehicle", "Ford Escort", "453543" );

它调用调用函数。第一个参数提供函数的键。第二个和第三个参数提供必须传递到 carManager 对象中存在的方法中的实际数据。这就是参数数组被切片的原因。

关于javascript - 返回函数 &&?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49466072/

相关文章:

javascript - 为什么在 javascript 中列出类的实际构造函数很重要

javascript - 如何在 Sequelize.js + Postgres.js 中给出主键和外键关系

Javascript 遍历 <li> 列表并分配事件(onitemclick)处理程序不起作用 - 为什么?

javascript - 分割文本避免某些情况(Javascript)

javascript - 下载所有数据,本地过滤或仅下载过滤后的数据

javascript - 为什么 scrollView 在我的代码中不能以垂直方式工作?

javascript - Jquery 铁燧岩选择器,带有需要转义的字符

javascript - 在 DustJS 中将变量添加到上下文中,或定义局部变量?

javascript - moment.js 中的日期时差

javascript - knockout 验证 - 配置位置(顶部或底部)跨度错误