在我的 Angular 模块中,我有一个这样的服务:
myApp.service( 'myService', function(){
this.publicFunction1 = function(){
...
};
this.publicfunction2 = function(){
...
};
function privateFunction(){
...
}
});
有时,我需要从私有(private)函数调用“公共(public)”函数之一,如下所示:
function somePrivateFunc(){
this.publicFunction1();
...
}
但是元素“this”似乎在私有(private)函数内不可见。如何在内部调用 publicFunction1() ?
这是一个解决方法,但是我想清楚地了解情况。有人可以向我解释一下这里发生了什么吗?有没有更好的方法来做到这一点?
myApp.service( 'myService', function(){
var service = this;
this.publicFunction1 = function(){
...
};
this.publicfunction2 = function(){
...
};
function privateFunction(){
service.publicFunction1();
...
}
});
最佳答案
保留this
的引用
外部变量并在任何地方引用它,如下所示:
myApp.service('myService', function() {
var self = this;
this.publicFunction1 = function() {
...
};
this.publicfunction2 = function() {
...
};
function privateFunction() {
...
}
function somePrivateFunc() {
self.publicFunction1();
...
}
});
由于公共(public)函数是服务的一部分,而 Angular 服务的执行上下文只不过是 this
关键字。但是,由于私有(private)函数(普通的 javascript 函数)不是服务的一部分,因此该函数不共享相同的执行上下文。因此,对于该私有(private)函数,执行上下文只不过是全局 window
对象。因此,如果您在私有(private)函数内引用 this
,您将获得 window
对象。因此,要从普通的 JavaScript 函数(私有(private)函数)调用服务函数,我们需要存储 Angular this
对象的引用。
希望这能消除您的疑虑。
关于javascript - AngularJS - 在私有(private)函数中使用 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34065015/