6
回答
javascript, 怎么定义一个函数, 函数的参数和顺序无关, 只和参数命名有关
滴滴云服务器,限时包月0.9元,为开发者而生>>>   
//学习angular.js时, 发现, angular.js的controller的函数, 运行时使用参数和传入的参数顺序无关, 只和参数名有关, 例如

var TestCtrl = function ($scope, $element) {
    console.log($scope, $element);
}

//与

var TestCtrl = function ($element, $scope) {
    console.log($scope, $element);
}

//这2个运行结果是一样的


//这个运行只有undefined, 参数名不能自定义
var TestCtrl = function ($s, $e) {
    console.log($s, $e);
}


//就想请教一下这个是怎么做到的? 希望能有一个简单的实现例子, 学习



<无标签>
举报
jacky-zhuo
发帖于4年前 6回/885阅
共有6个答案 最后回答: 4年前

下个源代码文件看下不就知道了。注释中就有:

extract the dependencies from the arguments of the function. This is done by converting the function into a string using `toString()` method and extracting the argument names.

--- 共有 1 条评论 ---
jacky-zhuo谢了哇 4年前 回复

我给你推荐几本书:

1、JavaScript高级程序设计(第3版)

2、JavaScript权威指南(第6版)

3、JavaScript语言精髓

4、高性能JavaScript

5、JavaScript模式

6、JavaScript DOM编程艺术

7、编写高质量代码(改善JavaScript程序的188个建议)

8、编写可维护的JavaScript

9、Effective JavaScript

10、高性能网站建设指南

11、高性能网站建设进阶指南

然后你再自己思考一下你对JavaScript的理解,相信你会有所收获。

--- 共有 5 条评论 ---
hello_152回复 @苏生不惑 : 简单了解过 4年前 回复
hello_152回复 @mr-zhuo : 9是刚出的 4年前 回复
jacky-zhuo9也没看过... 4年前 回复
jacky-zhuo我看过7本, 2看的是第5版, 5.6.7.8没看过 4年前 回复
苏生不惑楼主都看过? 4年前 回复
不会吧!相同的方法名  ,参数个数都相同   js只会执行最后一个的
--- 共有 1 条评论 ---
jacky-zhuo看了源代码, 用了toString获取了参数的字符串, 再通过这个字符串去获取另外一个对象的对应值传入方法 4年前 回复
如果你想提高JS水平,请先放弃angular.js、backbone.js、seajs、requirejs、jQuery、ExtJS等这些儿次要的东西,好好学学基础的JS,别一上来就被别人强奸,看着很可怜啊哈哈~
--- 共有 5 条评论 ---
hello_152回复 @mr-zhuo : 就是浏览器不识别angular.js的语法,最终还是要翻译成javascript才行。 4年前 回复
jacky-zhuo回复 @CHJ_chj : 浏览器不支持angular.js是什么意思? 4年前 回复
hello_152回复 @mr-zhuo : 这只是google的战略而已,只可惜浏览器不支持angular.js。 4年前 回复
hello_152回复 @mr-zhuo : 研究这个没有意义~ 4年前 回复
jacky-zhuo我只是对这个好奇, 觉得有趣, 其实看了源代码知道怎么实现的, 发出来想讨论一下, 看看有没有什么另外的实现方法 4年前 回复

你的例子中提到的$element和$scope都是angularjs的内置service,当你把他们当作参数传递到controller中的时候,会有一个'依赖注入'(DI)的动作。

而且你例子中的这种方法应该显式的申明,angularjs会按照参数名去查找具体的服务,$scope和$element都能找到对应的服务,而$e和$c找不到对应的服务,所以为undefined。

顶部