JavaScript are un număr de construit în funcție/metode care se pot aplica la diferite tipuri de date.
la fel ca .despică ( „” ) se poate aplica la un șir de caractere,.apel (),.aplica () și .bind () sunt metode de funcții.
aceste 3 funcții sunt toate concepute pentru a seta CONTEXT, sau mai precis, ceea ce „aceasta” se referă la.
de cele mai multe ori, ați defini întotdeauna „acest” sau l-ați inclus în mod specific într-o funcție., De exemplu, să presupunem că aveți un obiect:
var owen = { name: "Owen"}
Și vreau să fac referire la acest obiect, folosind o funcție:
function sayTo(person, first, second){ return first + " " + person.name + " " + second;}sayTo(owen, "Hi", "how are you?");
//returns "Hi Owen how are you?"
Acum, dacă invocat sayTo funcția pe Owen, cu 2 argumente, s-ar invoca în mod corect, pentru că
Acum, dacă sayTo a fost definit un pic diferit?
primul argument, owen, merge la prima variabilă, „hi” merge la a doua variabilă și „ce mai faci?”nu merge nicăieri și this.name este nedefinit, pentru că acest lucru nu este obiectul owen.
Acest lucru atunci când consola.,log-l, de fapt, returnează obiectul fereastră globală.
folosind .apel ()
.call () permite funcției sayTo să funcționeze:
notația este următoarea:
functionName.call(value of this, arg1, arg2…)
.apel forțează, în esență, valoarea în acest în oricare funcție .apelul este aplicat pe. În acest caz, invocăm funcția sayTo. .call (owen, …) forțează acest lucru al lui sayTo () să fie obiectul owen. Astfel this.name este aplicabil.
„bună” și ” ce mai faci?”sunt introduse ca al doilea sau al treilea argument al funcției sayTo (care are 2 argumente).
folosind .aplica ()
folosind .,aplica () este foarte similar cu .sec. Singura diferență este că .apel () ia arg1 și arg2 doar unul după altul.
pentru .aplicați() pentru a lucra, argumentele 1 și 2 trebuie introduse ca o matrice:
formatul este următorul:
functionName.apply(value of this, )
observați că arg1 și arg2 sunt introduse ca o matrice.
folosind .bind ()
.bind (), spre deosebire de .aplica () și .apel (), returnează o funcție în loc de o valoare.
.bind () setează valoarea acesteia și schimbă funcția într-o nouă funcție, dar nu invocă funcția.,
var owen = {name: "Owen”}function sayTo(first, second){return first + " " + this.name + " " + second;}var sayToOwen = sayTo.bind(owen);
în esență, sayToOwen este creat ca o funcție nouă. Care este techincally:
var sayToOwen = function(first, second){ return first + " " + owen.name + " " + second;}
puteți rula apoi sayToOwen ca o funcție normală.
de asemenea, puteți să „lega” argumentele sayTo() precum:
var owen = {name: "Owen”}function sayTo(first, second){return first + " " + this.name + " " + second;}var sayHiToOwen = sayTo.bind(owen, "Hi");
variabila sayHiToOwen apoi devine:
var SayHiToOwen = function(second){
return "Hi" + " " + owen.name + " " + second;}
Sumar