У меня возникают трудности со ссылкой на "this" из встроенной функции javascript в объектном методе.
var testObject = {
oThis : this,
testVariable : "somestring",
init : function(){
console.log(this.testVariable); // outputs testVariable as expected
this.testObject.submit(function(){
var anotherThis = this;
console.log(this.testVariable) // undefined
console.log(oThis.testVariable) // undefined
console.log(testObject.testVariable) // outputs testVariable
console.log(anotherThis.testVariable) // undefined
}
}
Как мне получить доступ к this.testVariable
из функции submit?
Я также использую jQuery, если это имеет значение.
Я думаю, не лучший ли это подход - и, возможно, мне следует сделать submit отдельной функцией, а затем ссылаться на нее в строке, например:
init : function(){
this.testObject.submit = this.submitForm;
},
submitForm : function(){
// do validation here
console.log(this.testVariable) // outputs testvariable
.
.
.
return valid;
}
Но это, похоже, тоже не сработало - и я думаю, что пока я просто хочу сохранить функцию submit в строке моего метода init
.
Распространенный способ — присвоить это
, которое вы хотите, локальной переменной.
init: function() {
var _this = this;
this.testObject.submit(function() {
console.log(_this.testVariable); // outputs testVariable
});
}
Переменная this связывается динамически, когда функция — любая функция, независимо от того, где она была определена — вызывается.
Не видя, что должна делать эта функция «отправить» или где она должна использоваться, трудно сказать, как ее изменить. Одна вещь, которую вы могли бы сделать, это определить «submit» в вашей функции «init»:
init: function() {
// whatever
var instance = this;
instance.submitForm = function() {
console.log(instance.testVariable);
// ...
};
}
Пока «init» вызывается изначально с «this», установленным на экземпляр одного из ваших объектов, все должно быть в порядке.