Javascript AngularJS:使用;这";在服务中的间隔函数中

Javascript AngularJS:使用;这";在服务中的间隔函数中,javascript,angularjs,angularjs-service,Javascript,Angularjs,Angularjs Service,当通过$interval调用“this”关键字时,如何使其在periodicFetch()中工作 这是我的angular应用程序的代码: angular.module('myapp', []); var MyService = function($rootScope, $http, $interval) { this.variables = {}; this.registerVariable = function(varName) { this.variabl

当通过
$interval
调用“this”关键字时,如何使其在
periodicFetch()中工作

这是我的angular应用程序的代码:

angular.module('myapp', []);

var MyService = function($rootScope, $http, $interval) {
    this.variables = {};

    this.registerVariable = function(varName) {
        this.variables[varName] = null;
    };

    this.periodicFetch = function() {
        console.log(this.variables);
    };

    this.run = function() {
        this.periodicFetch();
        $interval(this.periodicFetch, 1000);
    };
};

angular.module('myapp').service('myService',
        ['$rootScope', '$http', '$interval', MyService]);

angular.module('myapp').run(function(myService) {
    myService.registerVariable('foo');
    myService.run();
});
目前的输出是:

Object {foo: null}
undefined
undefined
undefined
...
它似乎适用于没有
$interval
的第一次调用。但是在
$interval
中,
this.variables
的值似乎是
未定义的

像这样试着使用

$interval(this.periodicFetch.bind(this), 1000);

这是指功能范围。一种选择是将对它的引用存储在变量中,通常命名为self<代码>var self=此,但是使用bind是正确的答案

谢谢你的解释!谢谢你简洁而有用的回答!