Dra*_*anS 5 javascript oop angularjs
什么是功能
function valueFn(value) {return function() {return value;};}
Run Code Online (Sandbox Code Playgroud)
在angular.js中定义.
它用于前.在
var lowercaseFilter = valueFn(lowercase);
register('lowercase', lowercaseFilter);
Run Code Online (Sandbox Code Playgroud)
如果我们直接使用小写,那么会有什么不同
register('lowercase', lowercase);
Run Code Online (Sandbox Code Playgroud)
而不是前一行.
同样的方法,在方法中
function ngDirective(directive) {
if (isFunction(directive)) {
directive = {
link: directive
}
}
directive.restrict = directive.restrict || 'AC';
return valueFn(directive);
}
Run Code Online (Sandbox Code Playgroud)
为什么最后一行不是
return directive;
Run Code Online (Sandbox Code Playgroud)
但
return valueFn(directive);
Run Code Online (Sandbox Code Playgroud)
pko*_*rce 12
过滤器(和一些其他服务)是常规函数,但AngularJS严重依赖于依赖注入,因此这些过滤器(函数)不会按原样(作为实例化对象)向客户端公开,而是由工厂函数创建.这样做是为了使AngularJS DI系统可以将依赖项注入工厂函数(稍后在闭包中可以使用这些依赖项).
但是有些情况下没有什么可注入的,整个工厂的功能工作归结为返回一个预先实例化的值.这是lowercaseFilter(和许多其他过滤器)的情况.因此,不是重复相同的,几乎不做任何工厂函数,而是 valueFn创建它以避免代码重复.没有它,AngularJS代码必须包含:
var lowercaseFilter = function(){
return lowercase;
};
var uppercaseFilter = function(){
return uppercase;
};
...
Run Code Online (Sandbox Code Playgroud)
写起来更简洁:
var lowercaseFilter = valueFn(lowercase);
var uppercaseFilter = valueFn(uppercase);
...
Run Code Online (Sandbox Code Playgroud)
简而言之 - 我怀疑原因是DRY.