javascript - AngularJS - 在私有(private)函数中使用 'this'

标签 javascript angularjs

在我的 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/

相关文章:

angularjs - 为什么 Controller 中的代码被调用两次?

javascript - 将 JavaScript 数组从 View 传递到 Laravel Controller

javascript - 为什么我的表行重复?

javascript - 我可以使用 pactjs 来测试通过事件流和消息队列进行通信的微服务吗?

angularjs - Bower install 是否需要在与 Bower.json 相同的文件夹中运行?

javascript - 无法验证所有嵌套子元素的长度

javascript - 从 img 标签获取源图像文件

javascript - 如何按字段名称列出 JavaScript 对象的属性

javascript - angular-ui 模态 Controller 内的 ng-model 输入未定义

angularjs - 嵌套 ng-repeat $parent.$index 和 $index