Ответ 1
Общим способом является назначение this
для локальной переменной.
init: function() {
var _this = this;
this.testObject.submit(function() {
console.log(_this.testVariable); // outputs testVariable
});
}
У меня возникли трудности с ссылкой "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
из функции отправки?
Я также использую jQuery, если это имеет значение.
Интересно, если это лучший подход - и, возможно, я должен был представить как отдельную функцию, а затем ссылаться на это inline, например:
init : function(){
this.testObject.submit = this.submitForm;
},
submitForm : function(){
// do validation here
console.log(this.testVariable) // outputs testvariable
.
.
.
return valid;
}
Но это тоже не сработало - и я думаю, что просто хочу сохранить функцию отправки внутри моего метода init
.
Общим способом является назначение this
для локальной переменной.
init: function() {
var _this = this;
this.testObject.submit(function() {
console.log(_this.testVariable); // outputs testVariable
});
}
Вы также можете сделать это, используя функции стрелок ES6:
init: function(){
this.testObject.submit( () => {
console.log(this.testVariable);
}
}
Функции стрелок захватывают значение this
окружающего контекста, избегая необходимости присваивать this
новой переменной или использовать связанные функции.
Переменная "this" связана динамически, когда функция — любая функция, независимо от того, где она была определена — называется.
Не видя, что должна выполнять функция "отправить" или где она должна использоваться, трудно сказать, как ее изменить. Единственное, что вы можете сделать, это определить "отправить" в вашей функции "init":
init: function() {
// whatever
var instance = this;
instance.submitForm = function() {
console.log(instance.testVariable);
// ...
};
}
Пока "init" вызывается изначально с "this", установленным экземпляром одного из ваших объектов, вы должны быть хорошими.
Вы можете получить доступ только к переменной oThis из контекста объекта, который потерян, потому что вы находитесь внутри другой функции. или путем создания экземпляра нового объекта. как это
var testInstance = new testObject();
Затем вы можете получить доступ к oThis, используя:
testInstance.oThis;
но это будет лишним.
Я бы попробовал что-то вроде этого Matt:
init: function(){
var self = this; // this allows you to access the parent object from different contexts
this.testObject.submit(function(){
console.log(self.testVariable);
}