在我的Angular模块中,我有一个像这样的服务:
myApp.service( 'myService', function(){ this.publicFunction1 = function(){ ... }; this.publicfunction2 = function(){ ... }; function privateFunction(){ ... } });
在某一点上,我需要从私有函数中调用一个"公共"函数,如下所示:
function somePrivateFunc(){ this.publicFunction1(); ... }
但是'this'元素似乎在私有函数中不可见.我怎么能在里面调用publicFunction1()?
这是一个解决方法,但我想明白这种情况.有人能解释一下这里发生了什么吗?还有更好的方法吗?
myApp.service( 'myService', function(){ var service = this; this.publicFunction1 = function(){ ... }; this.publicfunction2 = function(){ ... }; function privateFunction(){ service.publicFunction1(); ... } });
Ricky.. 5
保持this
变量的引用在外面,并在任何地方引用如下:
myApp.service('myService', function() { var self = this; this.publicFunction1 = function() { ... }; this.publicfunction2 = function() { ... }; function privateFunction() { ... } function somePrivateFunc() { self.publicFunction1(); ... } });
由于公共函数是服务的一部分,角度服务的执行上下文只不过是this
关键字.但是,由于私有函数(普通javascript函数)不是服务的一部分,因此该函数不共享相同的执行上下文.因此,对于该私有函数,执行上下文只是全局window
对象.因此,如果您this
在私有函数内部引用,您将获得该window
对象.因此,要从普通的javascript函数(私有函数)调用服务函数,我们需要存储角度this
对象的引用.
希望这清楚你的怀疑.
保持this
变量的引用在外面,并在任何地方引用如下:
myApp.service('myService', function() { var self = this; this.publicFunction1 = function() { ... }; this.publicfunction2 = function() { ... }; function privateFunction() { ... } function somePrivateFunc() { self.publicFunction1(); ... } });
由于公共函数是服务的一部分,角度服务的执行上下文只不过是this
关键字.但是,由于私有函数(普通javascript函数)不是服务的一部分,因此该函数不共享相同的执行上下文.因此,对于该私有函数,执行上下文只是全局window
对象.因此,如果您this
在私有函数内部引用,您将获得该window
对象.因此,要从普通的javascript函数(私有函数)调用服务函数,我们需要存储角度this
对象的引用.
希望这清楚你的怀疑.