如何将非字符串参数的名称映射到对象属性名称?

时间:2015-09-29 14:11:20

标签: javascript angularjs

AngularJS将依赖项名称存储为字符串,这是有意义的,因为我们可以这样做:

var dependencies = {};
function addDependency(name, value){
   if (typeof name == 'string') {
      dependencies['name'] = value;
   } else {
      //throw err
   }
}

但我不明白如何通过AngularJS的方式通过非字符串参数来获取该值,它告诉您为了访问依赖项,只需将参数视为名称:

  

获取依赖关系的最简单方法是假设   函数参数名称是依赖项的名称。

someModule.controller('MyController', 
    function($scope, greeter) {
       // ...
    });

在abover的情况下,我认为greeter必须采用字符串的形式,因此可以像dependencies[argument[i]];这样的循环访问它 我只是不明白如果参数不是字符串,JavaScript中如何将该参数的名称映射到某个依赖项名称。这怎么可能?我真的想知道如何在我的代码中进行各种语法改进。

1 个答案:

答案 0 :(得分:2)

有可能:

var foo = function(foo, bar) {};
foo.toString();
"function (foo, bar) {}"

现在通过一些正则表达式解析,您可以获取参数的名称。这就是Angular所做的。这有点像黑客,并且气馁。您可以在应用程序中使用ng-strict-di在未声明显式DI的情况下抛出错误。

Angular定义了许多显式声明依赖关系的方法。

我建议使用静态$inject属性。

MyController.$inject = ['$scope', 'greeter'];
function MyController($scope, greeter) { // . . . }