当前位置:  开发笔记 > 编程语言 > 正文

AngularJS - 在私有函数中使用'this'

如何解决《AngularJS-在私有函数中使用'this'》经验,为你挑选了1个好方法。

在我的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对象的引用.

希望这清楚你的怀疑.



1> Ricky..:

保持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对象的引用.

希望这清楚你的怀疑.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有