Middle
Kuidas erinevad noolefunktsioonid tavalistest funktsioonidest seoses bind meetodi kasutamise vajadusega?
sobes.tech AI
Vastus AI-lt
Nooltfunktsioonidel puudub oma this kontekst. Nad haaravad this ümbruskonnast (leksikalisest keskkonnast).
Tavalised funktsioonid määravad oma this sõltuvalt sellest, kuidas neid kutsutakse:
- Globaalses kontekstis (
windowvõiglobal). - Objekti meetodina (
thisviitab objekti). - Konstruktorina (
thisviitab uuele eksemplarile). - Kasutades
call,applyvõibind(thison selgelt määratletud).
Kuna noolfunktsioonidel puudub oma this, bind-i kasutamine noolfunktsiooni puhul ei oma mõtet ning ei muuda leksikaalselt seotud this-i. Kui proovite kutsuda bind noolfunktsiooni peale, tagastab see lihtsalt iseenda:
Näide:
// Tavaline funktsioon
const normalFunc = function() {
console.log(this.name);
};
const obj1 = { name: 'Object 1', method: normalFunc };
const obj2 = { name: 'Object 2' };
obj1.method(); // Tulemus: Object 1
const boundFunc = normalFunc.bind(obj2);
boundFunc(); // Tulemus: Object 2 (`this` on edukalt muudetud)
// Noolfunktsioon
const arrowFunc = () => {
console.log(this.name);
};
const obj3 = { name: 'Object 3' };
// ArrowFunc haarab `this` ümbruskonnast (antud juhul globaalne objekt)
arrowFunc(); // Tulemuseks: undefined (võimalik, sest `this` ei sisalda `name`)
const boundArrowFunc = arrowFunc.bind(obj3);
boundArrowFunc(); // Tulemuseks: undefined (`this` jäi samaks, bind ei mõjutanud)
// Näide `this` haaramisega
const person = {
name: 'Alice',
greet: function() {
// Siin `this` viitab `person`-ile
const greetLater = () => {
// Siin `this` haaratakse välisest `greet`-ist, st. samuti viitab `person`-ile
console.log(`Hello, ${this.name}!`);
};
greetLater();
}
};
person.greet(); // Tulemuseks: Hello, Alice!
Lõpuks, bind meetod on vajalik tavaliste funktsioonide jaoks, et selgelt määrata nende kontekst this, samas kui noolfunktsioonide puhul on see üleliigne, kuna nende this on leksikaliselt määratud ja seda ei saa bind-iga muuta.