Funcția Bind

bind este o metodă pe prototipul tuturor funcțiilor din JavaScript. Vă permite să creați o nouă funcție dintr-o funcție existentă, să schimbați funcția nouă this context și furnizați orice argumente cu care doriți să fie apelată noua funcție. Argumentele oferite bind va precede orice argumente care sunt transmise noii funcții atunci când este apelată.

Folosind bind a schimba this într-o funcție

Primul argument furnizat pentru bind este this contextul la care va fi legată funcția. Dacă nu doriți să modificați valoarea this trece null ca primul argument.

Vi se atribuie să scrieți cod pentru a actualiza numărul participanților pe măsură ce ajung la o conferință. Creați o pagină web simplă care are un buton care, atunci când faceți clic, crește numOfAttendees proprietate pe obiectul confrence. Folosiți jQuery pentru a adăuga un buton de clic la butonul dvs., dar după ce faceți clic pe buton obiectul confrence nu s-a schimbat. Codul dvs. ar putea arăta cam așa.

var nodevember = {
  numOfAttendees: 0,
  incrementNumOfAttendees: function() {
    this.numOfAttendees++;
  }
  // other properties
};

$('.add-attendee-btn').on('click', nodevember.incrementNumOfAttendees);

Aceasta este o problemă obișnuită atunci când lucrați cu jQuery și JavaScript. Când faceți clic pe butonul this cuvânt cheie din metoda pe care ați trecut-o la jQuery’s on metoda face referire la buton și nu la obiectul conferinței. Puteți lega this contextul metodei dvs. pentru a rezolva problema.

var nodevember = {
  numOfAttendees: 0,
  incrementNumOfAttendees: function() {
    this.numOfAttendees++;
  }
  // other properties
};

$('.add-attendee-btn').on('click', nodevember.incrementNumOfAttendees.bind(nodevember));

Acum, când se face clic pe buton this face referire la nodevember obiect.

ad-banner

Furnizarea de argumente unei funcții cu bind

Fiecare argument a trecut la bind după primul va preceda orice argument transmis atunci când funcția este apelată. Acest lucru vă permite să aplicați în prealabil argumente la o funcție. În exemplul de mai jos, combineStrings ia două șiruri și le concatenează împreună. bind este apoi folosit pentru a crea o funcție care oferă întotdeauna „Cool” ca primul șir.

function combineStrings(str1, str2) {
  return str1 + " " + str2
}

var makeCool = combineStrings.bind(null, "Cool");

makeCool("trick"); // "Cool trick"

Ghidul pe această referință are mai multe informații despre modul în care this referințele cuvintelor cheie se pot schimba.

Mai multe detalii despre bind metoda poate fi găsită pe Mozilla Documente MDN.

Lungimea funcției

length proprietatea de pe obiectul funcție deține numărul de argumente așteptat de funcție atunci când este apelat.

function noArgs() { }

function oneArg(a) { }

console.log(noArgs.length); // 0

console.log(oneArg.length); // 1

Sintaxă ES2015

ES2015, sau ES6 așa cum se numește în mod obișnuit, a introdus operatorul de repaus și parametrii funcției implicite. Ambele adăugiri modifică modul în care length lucrări de proprietate.

Dacă fie operatorul de repaus, fie parametrii impliciți sunt utilizați într-o declarație de funcție, length proprietatea va include doar numărul de argumente în fața unui operator de repaus sau a unui parametru implicit.

function withRest(...args) { }

function withArgsAndRest(a, b, ...args) { }

function withDefaults(a, b = 'I am the default') { }

console.log(withRest.length); // 0

console.log(withArgsAndRest.length); // 2

console.log(withDefaults.length); // 1

Mai multe informații despre Function.length pot fi găsite pe Documente MDN ale Mozilla.