Это обычно возникает при использовании системы сборки, такой как Apache Ant , которая только компилирует java-файлы, когда java-файл является более новым, чем файл класса. Если подписи метода изменяются, а классы используют старую версию, вещи не могут быть скомпилированы правильно. Обычным решением является полная перестройка (обычно «ant clean», затем «ant»).
Иногда это также может быть вызвано при компиляции с одной версией библиотеки, но работает с другой версией.
Это все еще предложение , и оно выглядело бы следующим образом:
class A {
property = "value";
}
Кстати, когда вы хотите получить доступ к свойству класса (т. е. к собственному свойству объекта), вы 'll все еще нужно использовать this.property
:
class A {
property = "value";
constructor() {
console.log(this.property);
}
}
Если вы хотите использовать этот синтаксис сегодня, вам нужно использовать транспилер, например Babel .
Вы не объявляете свойства; просто установите this._name = name
.
@Ryan Как мне получить доступ к переменной экземпляра в моем прослушивателе событий?
blockquote>this._name
просто даетundefined
.Каждый вызов функции * работает со своим
this
; ваш слушатель событий является функцией. Вы можете назначитьvar that = this;
вне прослушивателя событий и получить доступ к немуthat
:myFunction() { var that = this; document.getElementById("myElement").addEventListener("click", function() { console.log(that._name); }); }
Или создать новую функцию, которая всегда вызывает ваш с тем же
this
, используяFunction.prototype.bind
:myFunction() { document.getElementById("myElement").addEventListener("click", function() { console.log(this._name); }.bind(this)); }
Или используйте функции стрелок ES6, которые используют значение
this
, где они были определены (лексическийthis
):myFunction() { document.getElementById("myElement").addEventListener("click", () => { console.log(this._name); }); }