javascript, 怎么定义一个函数, 函数的参数和顺序无关, 只和参数命名有关

jacky-zhuo 发布于 2013/12/24 17:41
阅读 974
收藏 0
//学习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);
}


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



加载中
1
wilfon
wilfon

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

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.

jacky-zhuo
jacky-zhuo
谢了哇
1
hello_152
hello_152

我给你推荐几本书:

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的理解,相信你会有所收获。

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

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

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

返回顶部
顶部