Я попытаюсь объяснить это по-другому, и контекстом будет транспиляция Babel и ES2016.
Присваивание создает переменные.
В SampleClass2
method1
это просто переменная, которая имеет функцию в качестве значения.
class SampleClass2 {
method2 = this.method1(); // variable
method1 = () => { // oops, variable because of assignment.
return "works";
}
}
Подумайте об этом, так как конструктор не смог создать объект, содержащий методы, а получил только две переменные.
Теперь, поскольку вы определили method1
позже, method2
не определено. Затем вы пытаетесь вызвать что-то неопределенное.
Вот причина сообщения об ошибке.
Если вы удалите ()
следующим образом:
class SampleClass2 {
method2 = this.method1; // no longer an error
method1 = () => {
return "works";
}
}
Вы не получите ошибки при создании экземпляра SampleClass2
.
Почему первый случай сработал?
class SampleClass1 {
method2 = this.method1();
method1() {
return "works";
}
}
Это в основном говорит о том, что поместите функцию с именем method1
в прототип SampleClass1
и при создании нового объекта присвойте переменной с именем method2
возвращаемое значение метода [sic] method1
.
Не верьте вещам, связанным с прототипом.
Проверьте следующий код в Babel.
console.log(SampleClass1.prototype.method1) // function body
console.log(SampleClass2.prototype.method1) // nothing
Дайте мне знать, если я что-то пропустил или сделал ошибку. Надеюсь, поможет. :)
person
Community
schedule
08.04.2016
(function(){var a=test(); function test(){return "ok"} })()
vs(function(){var a=test(); var test=function(){return "ok"} })()
- person zb'   schedule 03.04.2016