У меня есть класс JavaScript, который выглядит следующим образом:Сфера «это» в JavaScript
function SomeFunction()
{
this.doSomething(function()
{
this.doSomethingElse();
});
this.doSomethingElse = function()
{
}
}
Этот код выдает ошибку, потому что объем «это» внутри функции, которая передается в DoSomething() является отличается от объема «этого» вне этой функции.
Я понимаю, почему это так, но каков наилучший способ справиться с этим? Это то, что я делаю:
function SomeFunction()
{
var thisObject = this;
this.doSomething(function()
{
thisObject.doSomethingElse();
});
this.doSomethingElse = function()
{
}
}
Это прекрасно работает, но это просто похоже на хак. Просто интересно, есть ли у кого-то лучший способ.
@Jon Kruger Это то, что я тоже делаю. Я думаю, что это нормально. Вы можете изменить 'this' на' call' и 'apply', но это не всегда соответствует тому, что вы делаете хорошо. Другой вариант - это параметр 'this' как параметр, но это похоже на еще больший взлом. –
@Jonathon Что вы подразумеваете под «Вы можете изменить это с помощью вызова и применить»? –
@Jon Kruger Посмотрите это, посмотрите также свою статью для 'call': https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Function/Apply –