funcțiile JavaScript pot fi invocate în 4 moduri diferite.
Fiecare metodă diferă în modul în care this este inițializat.
this cuvinte cheie
În JavaScript, lucru numit this , este obiectul care "owns" codul curent.
Valoarea this , atunci când este utilizat într - o funcție, este obiectul care "owns" funcția.
Rețineți că this nu este o variabilă. Este un cuvânt cheie. Nu se poate schimba valoarea this .
Invocarea o funcție JavaScript
Ați aflat deja că codul în interiorul unei funcții JavaScript va executa atunci când "something" îl invocă.
Codul într - o funcție nu este executată atunci când funcția este definită. Se execută atunci când funcția este invocată.
Unii oameni folosesc termenul de " call a function " în loc de " invoke a function " .
De asemenea , este destul de comună de a spune "call upon a function" , "start a function" , sau "execute a function" .
In acest tutorial, vom folosi invocam deoarece funcția JavaScript poate fi invocată fără a fi numit.
Invocarea unei funcții ca o funcție
Exemplu
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); // myFunction(10, 2) will return 20
Încearcă - l singur » Funcția de mai sus nu face parte din nici un obiect. Dar, în JavaScript există întotdeauna un obiect implicit la nivel mondial.
În HTML obiectul la nivel mondial este implicit pagina HTML în sine, astfel încât funcția de mai sus "belongs" la pagina HTML.
Într-un browser obiectul pagină este fereastra browser-ului. Funcția de mai sus devine automat o funcție fereastră.
myFunction() și window. myFunction() window. myFunction() este aceeași funcție:
Exemplu
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2); // window.myFunction(10, 2) will also return 20
Încearcă - l singur » Acesta este un mod comun de a invoca o funcție JavaScript, dar nu este o practică foarte bună.
Variabilele globale, metode sau funcții pot crea cu ușurință un conflict de nume și bug-uri în obiectul la nivel mondial.
Obiectul Global
Atunci când o funcție este apelată fără un obiect proprietar, valoarea this devine obiectul global.
Într-un browser web obiectul la nivel mondial este fereastra browser-ului.
Acest exemplu returnează obiectul fereastră ca valoarea this :
Exemplu
function myFunction() {
return this;
}
myFunction(); // Will return the window object
Încearcă - l singur » Invocarea o funcție ca funcție globală, determină valoarea this să fie obiectul global.
Utilizarea obiectului fereastră ca o variabilă poate bloca cu ușurință programul.
Invocarea unei funcții ca metodă
În JavaScript puteți defini funcția ca metode de obiect.
Exemplul următor creează un obiect ( myObject ) , cu două proprietăți ( firstName and lastName ) și o metodă ( fullName ) :
Exemplu
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // Will return "John Doe"
Încearcă - l singur » fullName Metoda este o funcție. Funcția aparține obiectului. myObject este proprietarul funcției.
Lucrul numit this , este obiectul care "owns" codul JavaScript. În acest caz , valoarea this este myObject .
Testați-l! Modificarea fullName metoda pentru a reveni valoarea this :
Exemplu
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this;
}
}
myObject.fullName(); // Will return [object Object] (the owner object)
Încearcă - l singur » Invocarea unei funcții ca metoda obiect, determină valoarea this a fi obiectul însuși.
Invocarea unei funcții cu funcții Constructor
Dacă o invocare funcție este precedat cu new cuvânt cheie, este o invocare constructor.
Se pare că creați o nouă funcție, dar din moment ce funcțiile JavaScript sunt obiecte creați de fapt, un obiect nou:
Exemplu
// This is a function constructor:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// This creates a new object
var x = new myFunction("John","Doe");
x.firstName;
// Will return "John"
Încearcă - l singur » O invocare constructor creează un obiect nou. Noul obiect moștenește proprietățile și metodele de constructorul acestuia.
this cuvânt cheie în constructor nu are o valoare.
Valoarea this va fi noul obiect creat atunci când funcția este invocată.
Invocarea unei funcții cu o metodă de funcții
În JavaScript, funcțiile sunt obiecte. funcțiile JavaScript au proprietăți și metode.
call() și apply() sunt predefinite metode de funcție JavaScript. Ambele metode pot fi folosite pentru a invoca o funcție, și ambele metode trebuie sa aiba obiectul proprietarului ca prim parametru.
Exemplu
function myFunction(a, b) {
return a * b;
}
myObject = myFunction.call(myObject, 10, 2); // Will return 20
Încearcă - l singur » Exemplu
function myFunction(a, b) {
return a * b;
}
myArray = [10, 2];
myObject =
myFunction.apply(myObject, myArray); // Will also return 20
Încearcă - l singur » Ambele metode de a lua un obiect proprietar ca primul argument. Singura diferență este că call() ia argumentele funcționale separat, și apply() ia argumentele funcționale într - o matrice.
În modul strict JavaScript, primul argument devine valoarea this în funcția invocată, chiar dacă argumentul nu este un obiect.
În "non-strict" modul, în cazul în care valoarea primului argument este nul sau nedefinit, acesta este înlocuit cu obiectul la nivel mondial.
Cu call() sau apply() , puteți seta valoarea this , și invocă o funcție ca o nouă metodă de un obiect existent.