Отличные ответы выше. Я хочу только добавить, что внутри области вашей функции вы можете присвоить значение этой переменной переменной let self = this;
, а затем внутри обратного вызова просто обратиться к данным типа self.data
.
Ваш код :
function MyConstructor(data, transport) {
this.data = data;
let self = this; //ADD THIS LINE
transport.on('data', function () {
alert(self.data); //USE IT LIKE THIS
});
}
// Mock transport object
var transport = {
on: function(event, callback) {
setTimeout(callback, 1000);
}
};
// called as
var obj = new MyConstructor('foo', transport);
AbstractMethodError
является подклассом IncompatibleClassChangeError
, чей javadoc читает:
Брошено, когда какое-то определение класса произошло несовместимое изменение класса. Определение некоторого класса, от которого зависит текущий исполняемый метод, с тех пор изменилось.
blockquote>То есть класс
A
зависит от некоторого другого классаB
, который был изменен несовместимым образом с момента компиляцииA
, т. е. у вас неправильная версия некоторой зависимости в вашем пути к классам.Возможно, вы захотите проверить, действительно ли используется версия спящего режима. Я подчеркиваю это, потому что вы утверждаете, что используете Hibernate 4, но на самом деле включаете зависимости Hibernate 5 в свой pom.xml:
blockquote><hibernate.version>5.0.4.Final</hibernate.version>
и
blockquote><dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.0.4.Final</version> <scope>runtime</scope> </dependency>