Javascript AngularJS-值fn
功能的意义是什么Javascript AngularJS-值fn,javascript,oop,angularjs,Javascript,Oop,Angularjs,功能的意义是什么 function valueFn(value) {return function() {return value;};} 在angular.js中定义 它是用来交换的 var lowercaseFilter = valueFn(lowercase); register('lowercase', lowercaseFilter); 如果我们像在中那样直接使用小写,会有什么不同 register('lowercase', lowercase); 而不是前一行 同样地,在方法上
function valueFn(value) {return function() {return value;};}
在angular.js中定义
它是用来交换的
var lowercaseFilter = valueFn(lowercase);
register('lowercase', lowercaseFilter);
如果我们像在中那样直接使用小写,会有什么不同
register('lowercase', lowercase);
而不是前一行
同样地,在方法上
function ngDirective(directive) {
if (isFunction(directive)) {
directive = {
link: directive
}
}
directive.restrict = directive.restrict || 'AC';
return valueFn(directive);
}
为什么最后一行不是
return directive;
但是
过滤器(和其他一些服务)是常规函数,但AngularJS严重依赖依赖于依赖注入,因此这些过滤器(函数)不会按原样(作为实例化对象)向客户端公开,而是由工厂函数创建。这样做是为了AngularJS DI系统可以将依赖项注入工厂函数(这些依赖项在后面的闭包中可用)
但在某些情况下,没有任何东西可以注入,整个工厂函数作业归结为返回一个预先实例化的值。这就是小写过滤器
(以及许多其他过滤器)的情况。因此,创建valueFn
是为了避免代码重复,而不是重复相同的、几乎什么都不做的工厂函数。如果没有它,AngularJS代码必须包含:
var lowercaseFilter = function(){
return lowercase;
};
var uppercaseFilter = function(){
return uppercase;
};
...
更简洁的说法是:
var lowercaseFilter = valueFn(lowercase);
var uppercaseFilter = valueFn(uppercase);
...
简而言之,我怀疑原因是。这是因为像
register
这样的函数需要将函数作为第二个参数传递,并且函数必须返回配置对象。valueFn
返回一个函数,该函数返回配置对象。谢谢。我是根据你的建议找到的。我可以将valueFn称为“函数引用”(用C++表示)
var lowercaseFilter = valueFn(lowercase);
var uppercaseFilter = valueFn(uppercase);
...