首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >巴贝尔7号,这是_this angularjs

巴贝尔7号,这是_this angularjs
EN

Stack Overflow用户
提问于 2018-05-07 15:11:07
回答 2查看 415关注 0票数 0

我正在使用ES6AngularJSbabel-loader 7.1.4Webpack 3开发一个应用程序。在我创建服务文件之前,一切都很好:

这是我的服务:

代码语言:javascript
复制
'use strict';

module.exports = (ngModule) => {

    ngModule.service('$ui', () => {


        //#region Methods

        /*
        * Trigger windows resize function.
        * */
        this.reloadWindowSize = () => {
            $(window).resize();
        };

        //#endregion
    });
};

在将源代码从ES6转移到ES2015之后,我的服务变成:

代码语言:javascript
复制
module.exports = function (ngModule) {

    ngModule.service('$ui', function () {

        //#region Methods

        /*
        * Trigger windows resize function.
        * */
        _this.reloadWindowSize = function () {
            $(window).resize();
        };

        //#endregion
    });
};

正如您所看到的,this现在变成了_this,因此,我无法在服务文件中执行该函数。

这是我的babel配置

代码语言:javascript
复制
{
    test: /\.js$/,
    exclude: /(node_modules|bower_components)/,
    use: {
        loader: 'babel-loader',
        options: {
            presets: [['env', { "modules": false }]]
        }
    }
}

我做错什么了?

有人能帮我吗?

谢谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-07 16:07:50

在阅读本题之后。我找到了答案。

我将服务实现更改为:

代码语言:javascript
复制
'use strict';

module.exports = (ngModule) => {

    ngModule.service('$ui', () => {


        //#region Methods

        /*
        * Trigger windows resize function.
        * */
        this.reloadWindowSize = () => {
            $(window).resize();
        };

        //#endregion
    });
};

对此:

代码语言:javascript
复制
module.exports = (ngModule) => {

    ngModule.service('$ui', () => {

        return {

            //#region Methods

            /*
            * Reload window size.
            * */
            reloadWindowSize: () => {
                $(window).resize();
            }

            //#endregion
        }
    });
};

在服务声明中,我返回一组函数,并且它工作了。

只是想让任何人知道这件事。我花了一个晚上才找到答案。

票数 0
EN

Stack Overflow用户

发布于 2018-05-07 16:10:54

箭头函数不仅仅是常规函数的快捷方式。

正如参考文献所说,

影响箭头函数引入的因素有两个:函数较短和不绑定.

由于源代码包含多个嵌套箭头函数,所以this通过_this变量(即undefined )从顶层作用域检索,因为它具有模块作用域,并且启用了严格模式。

service服务使用箭头函数在语义上是不正确的,因为它们是用new实例化并使用this作为服务实例的,而箭头不能被new编辑,也没有自己的this

它应该是:

代码语言:javascript
复制
ngModule.service('$ui', function () {
    //#region Methods

    /*
    * Trigger windows resize function.
    * */
    this.reloadWindowSize = () => {
        $(window).resize();
    };

    //#endregion
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50217373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档