javascript – 了解AngularJS函数$arguments
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 了解AngularJS函数$arguments,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2441字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 了解AngularJS函数$arguments](/upload/InfoBanner/zyjiaocheng/787/0aa72179f55d471283a21e07ee26100d.jpg)
开始进入angular.js,我看到了一个与回调参数相关的常见模式.一个例子是ui-router documentation:
var myApp = angular.module('myApp', ['ui.router']);
myApp.config(function($stateProvider, $urlRouterProvider) {
// Do stuff with ui-router providers
}):
但是,从我见过的想法来看,myApp.config回调的参数可能不同,它仍然会按预期运行:
myApp.config(function(OtherProvider) {
// Do stuff with provider from another service
});
myApp.config如何知道其中的区别?是否进行了奇怪的魔法内省,或者是否有一些基本的JS概念允许这样做?例如.就像是:
myApp.config = function(callback) {
var providerNames = callback.argumentNames;
var providers = this.findProviders(providerNames);
};
也许我已经习惯了python,这种功能只能通过一些非常可怕的黑客来实现.
解决方法:
这是Angular for one method of dependency injection使用的“可怕的黑客” – 服务名称从参数名称自动解析.在语言层面上没有这种操作的内在支持.
参数值(但不是参数名称)可以通过函数中的arguments对象访问.但是,只能通过将[[ToString]]应用于函数对象并解析result1来访问参数名称本身,这是一个“可怕的黑客”.
在显式表单中,注入的参数必须以与提供的依赖项列表相同的顺序出现 – 在这种情况下,参数的名称无关紧要,因为服务名称是单独提供的.
从链接文档中略微修改了表单的摘录:
// service names supplied separately
// - only Order of parameters matters
someModule.controller('MyController',
['$scope', 'greeter', function(I_am_a_scope, greeter) { ..
// service names supplied separately
// - only Order of parameters matters
var MyController = function($scope, GREETER) { ..
MyController.$inject = ['$scope', 'greeter'];
// "scary hack" magic of Angular JS, as service names not specified separately
// - the Name of the parameters is used as service name
// arguably Too Much Magic (TM), and a source of pain for minification
someModule.controller('MyController', function(greeter, $scope) { ..
前两个表单使用Function.prototype.apply,类似于apply() in Python.第三个表示要求并解析函数的文本表示 – “可怕的黑客”.
1要了解如何实现魔法形式,请考虑以下事项:
f = function (a,b) { return a+b }
f.toString() // e.g. -> "function (a, b) { return a + b; }"
ECMAScript 5称Function.prototype.toString返回:
An implementation-dependent representation of the function is returned. This representation has the syntax of a FunctionDeclaration. Note in particular that the use and placement of white space, line terminators, and semicolons within the representation String is implementation-dependent.
(我不知道任何现代浏览器没有返回’可用’结果;返回表示的行为不是可选的是ES5.)
内容总结
以上是互联网集市为您收集整理的javascript – 了解AngularJS函数$arguments全部内容,希望文章能够帮你解决javascript – 了解AngularJS函数$arguments所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。