【问题标题】:babel compile es6 class, function not definedbabel 编译 es6 类,函数未定义
【发布时间】:2016-05-24 06:45:33
【问题描述】:

Babel 正在编译我的 es6 类,因此构造函数本身就是一个函数,类中的方法成为类声明。

这会导致构造函数中的任何函数调用都未定义。

之前:

class myClass {
    constructor() {
        myMethod();
    } // END constructor

    myMethod() {
        console.log("myMethod");
    } 
} // END myClass

之后:

var myClass = function () {
    function myClass() {
        _classCallCheck(this, myClass);
        myMethod(); // undefined function
    } // END constructor

    _createClass(myClass, [{
        key: 'myMethod',
        value: function myMethod() { 
            console.log("myMethod");
        } // END myMethod()
    }]);

    return myClass;
}(); // END myClass

exports.default = myClass;

感谢任何帮助

【问题讨论】:

    标签: javascript oop methods constructor ecmascript-6


    【解决方案1】:

    在 ES6 类的构造函数和方法中需要 this.myMethod()

    class myClass {
        constructor() {
            this.myMethod();
        } // END constructor
    
        myMethod() {
            console.log("myMethod");
        }
    } // END myClass
    

    myMethod() 在类外调用名为 myMethod 的函数。

    function myMethod() {
        console.log("external function!");
    }
    
    class myClass {
        constructor() {
            myMethod();
        } // END constructor
    
        myMethod() {
            console.log("myMethod");
        }
    } // END myClass
    

    JavaScript 的方法只是一个对象的属性,它是一个函数。您需要obj.prop 才能访问属性。在类构造函数和方法中,this 指向实例本身。

    【讨论】:

    • 感谢您的帮助,我最初在构造函数中尝试过,添加了这个。在 es6 文档和 babel 中也没有通过语法错误“意外令牌”提到方法声明。还尝试了 myMethod: function() {},结果相同。可以提供代码示例,以便我可以看到您在说什么?
    • 谢谢这实际上是我的问题的一部分,我忽略的另一个问题是我试图在回调匿名函数中访问 myMethod 。删除匿名 func 包装器并使用 this.myMethod.bind(this) 一劳永逸地解决了问题
    • 如果你使用 ES6,箭头函数 (() => {}) 也很方便。在其中,this 指的是其外部范围的this 所指的同一对象。 class Something { constructor() { someElement.addEventListener('click', () => { this.myMethod(); /* 'this' refers to the instance! */ }); } }
    猜你喜欢
    • 1970-01-01
    • 2016-05-13
    • 2016-05-03
    • 2019-03-21
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    相关资源
    最近更新 更多