…ili šta znači ključna reč this i kada?

Jedna od najmoćnijih ključnih reči u JavaScript-u je this, ali je teško snaći se jer joj funkcija varira u zavisnosti u kom kontekstu se upotrebljava. Budući da je JS “classless” jezik – a ipak objektno orjentisan, function ima i ulogu konstruktora objekta (preporučeno praćenje konvencije da se ime konstruktora piše velikim početnim slovom). U ovakvom dvojnom svojstvu – dolazi do dualnog ponašanja ključne reči this, kao na primer:

function foo() <---- funkcija foo()
{
this.nekiVar; <---- global scope
}

function Foo() <---- konstruktor objekta
{
this.nekiVar; <---- svojstvo u konstruktoru
}

U prvom primeru unutar funkcije foo() ključna reč this se odnosi na “vlasnika” date funkcije, ili tačnije objekat čiji je foo() metod. Kada definišemo funkciju, ona je definisana na globalnom nivou, tj. ona je metod window (globalnog) objekta.
Nasuprot tog ponašanja, this dobija potpuno drugu funkcionalnost unutar konstruktora – ono se odnosi na svojstvo (property) unutar datog objekta.

Da nastavimo dalje – koristimo funkciju koja poziva promenljivu iz window objekta:

var nekiVar = 5;
function foo(){ alert(this.nekiVar); }
foo(); // alert sa ispisom 5

Dakle, iz primera se zaključuje se ključna reč this odnosi na globalni opseg, a this.nekiVar na promenljivu deklarisanu unutar tog opsega.
Sa druge strane, imamo primer sa konstruktorom objekta:

var nekiVar = 5;
function Foo() { this.nekiVar; }
var moo = new Foo(); // instanciramo novi objekat moo koji je tipa podataka Foo()
alert(moo.nekiVar); // alertuje se 'undefined'
moo.nekiVar = 6;
alert(moo.nekiVar); // alertuje se 6

Dakle vidimo da ključna reč this ni u jednom momentu ne referencira na promenljivu nekiVar u globalnom opsegu sa vrednošću 5.