Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-值fn_Javascript_Oop_Angularjs - Fatal编程技术网

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);
...