功能定义无法理解

时间:2017-01-08 00:33:25

标签: javascript angularjs

我知道一些javascript函数声明。像exression函数一样,匿名函数,但我不明白这两个函数的语法是什么?谁能告诉我这两个功能的名称是什么?我的意思是"操纵数据:功能(输入)"和" getDataById:function(id)"。

为什么return语句可以使用这种语法返回两个函数?为什么不一次返回一个函数而不是两个函数?如果你能给我一些参考文件会很棒吗?感谢。

app.service('MyService', function ($http, $q, $angularCacheFactory) {
    var _dataCache = $angularCacheFactory('dataCache', { 
        maxAge: 3600000 // items expire after an hour
    });
    /**
     * @class MyService
     */
    return {
        manipulateData: function (input) {
            var output;
            // do something with the data
            return output;
        },

        getDataById: function (id) {
            var deferred = $q.defer();
            if (_dataCache.get(id)) {
                deferred.resolve(_dataCache.get(id));
            } else {
                // Get the data from the server and populate cache
            }
            return deferred.promise;
        }
    };
});

3 个答案:

答案 0 :(得分:0)

这些函数只是一个恰好是对象中值的匿名函数。考虑一下:

var object = {
  add: function(x, y) {
    return x + y;
  }
};

object.add(1, 2); // = 3

这与:

相同
function addFunction(x, y) {
  return x + y;
}

var object = {
  add: addFunction
};

object.add(1, 2); // = 3

这些函数没有什么特别之处,因为它们只是对象的常规属性。

答案 1 :(得分:0)

在这种情况下,你不会返回一个函数,而是一个Object。

在angularjs中定义service时,必须在回调中提供其实现(app.service的第二个参数) 此回调必须返回您希望提供给应用程序其他部分的方法。

然后在控制器或其他服务中,您将能够写下:

app.controller("MyCtrl", ["MyService", function(MyService) {
  MyService.getDataById('an id');
}]);

答案 2 :(得分:0)

Angular Service返回绑定到app命名空间的服务实例,return语句中的那些函数是可以使用的公共方法。基本上是一个包含两个方法manipulateDatagetDataById

的对象

它与此相似

function company() {
  let product; // This is private

  // Public Methods
  return {

    setLatestProduct: function(value) {
      product = value;
      console.log(product, ' set');
    },

    getLatestProduct: function() {
      return product;
    }
  }

}

const apple = company();
console.log(apple); // { setLatestProduct: function, getLatestProduct: function }