2016-02-12 108 views
0

Babel正在编译我的es6类,所以构造函数本身就是一个函数,并且类中的方法成为类声明。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; 

感谢您在这

回答

0

任何帮助,您需要在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的方法只是一个Object的属性,它是一个函数。您需要obj.prop才能访问属性。在类构造函数和方法中,this指向实例本身。

+0

感谢您的帮助,我最初在构造函数中试过,添加了这个。到方法声明没有在es6文档和babel中通过语法错误“意外标记”提及。还尝试了myMethod:function(){},结果相同。可以提供代码示例,所以我可以看到你到底在说什么? – appthat

+0

当然!添加代码示例编辑答案。 –

+0

谢谢,这实际上是我的问题的一部分,我忽略的另一个问题是,我试图访问回调匿名函数内的myMethod。删除匿名函数包装并使用this.myMethod.bind(this)一劳永逸地解决问题 – appthat