Problemă cu 'this' în function.call() în JavaScript

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
Marius
Mesaje: 47

Problemă cu 'this' în function.call() în JavaScript

De ce function.call() se comportă diferit cu 'this' cand nu e adaugat ca argument, în JavaScript?
Rezultatul cu 'this' în test.call() este același atunci când 'this' este înlocuit cu 'undefined'.

Cod: Selectaţi tot

function test(a,b){
  console.log(a+b);
}

let args = [1,2]
test.call(this, ...args); // Output: 3
test.call(undefined, ...args); // Output: 3
Dar fara 'this' in test.call(), rezultatul aici e NaN.

Cod: Selectaţi tot

function test(a,b){
  console.log(a+b);
}

let args = [1,2]
test.call(...args); // Output: NaN

MarPlo
Functia call() necesita primul argument, care e pentru obiectul 'this', daca nu ai nevoie de el, adauga null.

Cod: Selectaţi tot

test.call(null, ...args);
In codul tau transferi argumentele la parametru 'this' in functia test(), nu la (a, b).
Poti verifica cu console.log(this) sa vezi diferenta cand 'this' e sau nu adaugat.

Cod: Selectaţi tot

function test(a,b){
  console.log(this) // number 1
  console.log(a) // number 2
  console.log(b) // undefined
  console.log(a+b) // 2 + undefined will be NaN
}

let args = [1,2]
test.call(...args);
Primul argument e mereu pentru 'this'.
Daca adaugi un sir ca prim argument, atunci 'this' va fi acel sir.

Cod: Selectaţi tot

function test(a,b){
  console.log(this) // "marplo"
  console.log(a) // number 1
  console.log(b) // number 2
}

let args = [1,2]
test.call('marplo', ...args);

Subiecte similare