window.bind()使用AngularJS的类似功能

时间:2015-07-20 06:56:25

标签: javascript angularjs

我想设置函数的上下文并将其作为回调传递。为此,我正在这样做。

myController.myService.validateToken(param)
    .then( myController.myService.getToken.bind( myController.myService ) );

myController.myService.getToken.bind(myController.myService)

但我不确定它是否是正确的做法?

Angular是否提供与bind()类似的功能?

1 个答案:

答案 0 :(得分:2)

请参阅AngularJS 1.4.1(第1146行)中定义的angular.bind

function bind(self, fn) {
  var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
  if (isFunction(fn) && !(fn instanceof RegExp)) {
    return curryArgs.length
      ? function() {
          return arguments.length
            ? fn.apply(self, concat(curryArgs, arguments, 0))
            : fn.apply(self, curryArgs);
        }
      : function() {
          return arguments.length
            ? fn.apply(self, arguments)
            : fn.call(self);
        };
  } else {
    // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
    return fn;
  }
}

所以用法应该是:

var context, fn, args;
angular.bind(context, fn, args);