Mam klasy JavaScript, który wygląda tak:Zakres „to” w JavaScript
function SomeFunction()
{
this.doSomething(function()
{
this.doSomethingElse();
});
this.doSomethingElse = function()
{
}
}
Ten kod wygeneruje błąd, ponieważ zakres „to” wewnątrz funkcji, która jest przekazywana do doSomething() jest inny niż zakres "tego" poza tą funkcją.
Rozumiem, dlaczego tak jest, ale jaki jest najlepszy sposób, aby sobie z tym poradzić? Właśnie to robię:
function SomeFunction()
{
var thisObject = this;
this.doSomething(function()
{
thisObject.doSomethingElse();
});
this.doSomethingElse = function()
{
}
}
To działa dobrze, ale po prostu wydaje się być hakiem. Zastanawiam się, czy ktoś ma lepszy sposób.
@Jon Kruger To też robię. Myślę, że to całkiem normalne. Możesz zmienić 'this' za pomocą' call' i 'apply', ale to nie zawsze pasuje do tego, co robisz dobrze. Inną opcją jest podanie 'this' jako parametru, ale to wydaje się być jeszcze bardziej hackerem. –
@ Jonaton Co masz na myśli przez "Możesz to zmienić za pomocą połączenia i aplikacji"? –
@Jon Kruger Zobacz także: "call": https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Function/Apply –