是否有任何用于angular.identity()的用例的好例子?

时间:2013-03-14 22:34:58

标签: javascript functional-programming angularjs

根据文件

A function that returns its first argument. This function is useful when writing code in the functional style.

我想知道在哪里可以找到这样一个用例的好例子 - 在角度应用程序中编写功能样式的代码。 感谢

4 个答案:

答案 0 :(得分:15)

AngularJS源代码示例:

function transformer(transformationFn, value) {
  return (transformationFn || angular.identity)(value);
};

说明:

如果transformationFn作为第一个参数提供,它将使用value作为自己的参数进行调用。否则将使用相同的值调用identity函数。

作为ng源代码提及:

  

在以函数样式编写代码时,此函数非常有用。

这意味着在函数式编程中没有全局变量,所以你总是必须传递/注入你需要的所有东西。

答案 1 :(得分:9)

让我们说我们有以下两个功能:

$scope.square = function(n) {
return n * n
};


$scope.multplybyTwo = function(n) {
return n * 2
};

以功能方式调用它:

$scope.givemeResult = function(fn, val) {
return (fn || angular.identity)(val);
};

然后您可以使用以下功能:

$scope.initVal = 5;
$scope.squareResult = $scope.givemeResult($scope.square, $scope.initVal);
$scope.intoTwo = $scope.givemeResult($scope.multplybyTwo, $scope.initVal);

您可以点击以下链接:

http://litutech.blogspot.in/2014/02/angularidentity-example.html

答案 2 :(得分:7)

如果我错了,请纠正我,但我的理解是这个

function transformer(transformationFn, value) {
  return (transformationFn || angular.identity)(value);
};

可能是"未重构的"到这个

function transformer(transformationFn, value) {
  if (transformationFn) {
    return transformationFn(value);
  } else {
    return angular.identity(value);
  }
};

在功能上等同于此identity - 更少版本:

function transformer(transformationFn, value) {
  if (transformationFn) {
    return transformationFn(value);
  } else {
    return value;
  }
};

所以我想用例是当你想要为某个值提供某些可能存在或可能不存在的值时,将某个转换应用于某个值。

我想更好地解释identity功能(据我所知),虽然在回顾我的回答时我并不认为我真的回答了你的问题。无论如何,请留下我的答案,以防万一。

答案 3 :(得分:4)

angular.identity对于您希望通过将父对象绑定到其子对象来引用绑定到父对象的对象的情况非常有用。

  

身份函数就像函数的零一样。有点无用,但偶尔用作高阶函数表达式的一部分,你可以将函数作为参数或作为结果返回。

以下是数组值的示例:

  

例如,您可以将二维数组绑定到初始选择,然后将包含的内部数组绑定到每个子选择。在这种情况下,values函数是identity函数:它为每个子元素组调用,传递绑定到父元素的数据,并返回该数据数组。

当需要将虚拟函数传递给:

时使用它
  • 承诺($ q)
  • 编译器($ compile)
  • 单元测试(间谍/模拟)

用作管道过滤器的数据源或泵。

相比之下,Angular.noop错误地正确处理解析/拒绝promise,因为它总是返回undefined,而Angular.identity正确处理解析/拒绝promise,因为它总是返回传递给它的参数({{1} })。

就Angular中的构造函数而言,它是相关的:

  

如果构造函数未显式返回对象(即类型对象或函数的值),则JavaScript引擎仅返回构造函数的实例。因此,新的身份(价值)始终是一个对象。因此,如果value是一个对象,则新的identity(value)== value仅返回true。这是因为当其中一个操作数是对象时,JavaScript中的相等运算符总是检查身份。

<强>参考