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

标签 javascript angularjs

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/

相关文章:

javascript - 在 React/TypeScript 应用程序中初始化可为空状态的正确方法是什么?

javascript - 如何从 Angular 之外编译动态模板?

php - 代码点火器 + Angular Js : How to receive JSON data

javascript - 如何在angularjs指令中使用动态模板

javascript - 将 Controller 代码转换为可重用指令

javascript - 如何使用任何命令行工具或脚本将 Word 文档内容复制到 Google 文档

javascript - 重复回调函数的最佳实践?

javascript - 从 DOM 节点中提取纯文本

php - 从 php 中的数组构造 javascript

Angularjs:加载 HTML 模板时的 HTTP 请求数?