AngularJS 将依赖项名称存储为字符串,这是有道理的,因为我们可以这样做:
var dependencies = {};
function addDependency(name, value){
if (typeof name == 'string') {
dependencies['name'] = value;
} else {
//throw err
}
}
但我不明白如何像 AngularJS 那样通过非字符串参数掌握该值,它告诉您为了访问依赖项,只需将参数视为名称:
The simplest way to get hold of the dependencies is to assume that the function parameter names are the names of the dependencies.
someModule.controller('MyController', function($scope, greeter) { // ... });
在上述情况下,我认为 greeter
必须采用字符串形式,以便可以在循环中访问它,例如 dependencies[argument[i]];
我只是不明白如果参数不是字符串,在 JavaScript 中如何将该参数的名称映射到某个依赖项名称。这怎么可能?我真的很想知道如何为我的代码中的各种语法改进执行此操作。
最佳答案
有可能:
var foo = function(foo, bar) {};
foo.toString();
"function (foo, bar) {}"
现在,通过一些正则表达式解析,您可以获得参数的名称。这就是 Angular 所做的。这是一个有点hack,并且气馁。您可以在应用程序中使用 ng-strict-di
在未声明显式 DI 的地方抛出错误。
Angular 定义了许多显式声明依赖项的方法。
我建议使用静态 $inject
属性。
MyController.$inject = ['$scope', 'greeter'];
function MyController($scope, greeter) { // . . . }
关于javascript - 如何将非字符串参数的名称映射到对象属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32846224/