Skip to content

Latest commit

 

History

History
44 lines (32 loc) · 1.05 KB

File metadata and controls

44 lines (32 loc) · 1.05 KB

Răspuns: o eroare.

Încercați:

function makeUser() {
  return {
    name: "John",
    ref: this
  };
};

let user = makeUser();

alert( user.ref.name ); // Eroare: Cannot read property 'name' of undefined

Acest lucru se datorează faptului că regulile care setează this nu se uita la definirea obiectului. Doar momentul apelului contează .

Aici valoarea variabilei this din interiorul funcției makeUser() este undefined, deoarece este apelată ca funcție, nu ca o metodă cu sintaxa "punct".

Valoarea variabilei this este unică pentru întreaga funcția, blocurile de cod și obiectele literale nu o afectează.

În concluzie ref: this preia de fapt variabila curentă this a funcției.

Iată cazul opus:

function makeUser() {
  return {
    name: "John",
*!*
    ref() {
      return this;
    }
*/!*
  };
};

let user = makeUser();

alert( user.ref().name ); // John

Acum funcționează, pentru că user.ref() este o metodă. Iar valoarea variabilei this este setată la obiectul dinaintea punctului ..