JavaScript Academy · Oppitunti

Metodien irrottamisen sudenkuopat ja osittainen soveltaminen

Korjaa metodien irrottaminen call-, apply- ja bind-metodeilla ja opi pienet osittaisen soveltamisen mallit bindillä ja wrapper-nuolilla

Oppitunti 2/38 vaihetta

Metodien irrottamisen sudenkuopat ja osittainen soveltaminen on ilmainen JavaScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/3. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu JavaScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. JavaScript Academy-kurssilla on yhteensä 3 oppituntia.

Kokonaiskuva

Tavoite: Säilyttäkää this funktion irrottamisen jälkeen ja täyttäkää argumentteja etukäteen.

  • call(thisArg, a, b)
  • apply(thisArg, [a, b])
  • bind(thisArg, a) → palauttaa uuden funktion
  • Osittainen soveltaminen bindillä tai pienellä nuolifunktiolla
Metodien irrottamisen sudenkuopat ja osittainen soveltaminen — kuvitus 1

Funktion irrottamisen kompastuskivi

Kutsu muodossa obj.method() toimii, mutta funktion irrottaminen kadottaa olion ja rikkoo this-arvon.

// Extraction loses this
const user = {
  name: "Ayla",
  label: function (prefix) {
    return prefix + ":" + this.name;
  }
};

console.log("method call:", user.label("Hi")); // "Hi:Ayla"

// Extract
const f = user.label;
console.log("extracted:", f("Hi")); // this is missing -> "Hi:undefined" (in strict mode this is undefined)
Metodien irrottamisen sudenkuopat ja osittainen soveltaminen — kuvitus 2

call/apply kertaluontoisesti

call- ja apply-metodeilla voitte asettaa this-arvon yhtä kutsua varten.

// Fix by passing this explicitly using call/apply
console.log("call :", f.call(user, "Hi"));   // "Hi:Ayla"
console.log("apply:", f.apply(user, ["Yo"])); // "Yo:Ayla"
Metodien irrottamisen sudenkuopat ja osittainen soveltaminen — kuvitus 3

bind uudelleenkäyttöön

bind luo funktion, joka muistaa this-arvon. Kutsukaa sitä monta kertaa ilman uutta sitomista.

// bind returns a new function with this fixed
const bound = f.bind(user);
console.log("bound once:", bound("Hey")); // "Hey:Ayla"
console.log("bound again:", bound("Yo")); // "Yo:Ayla"
Metodien irrottamisen sudenkuopat ja osittainen soveltaminen — kuvitus 4

Osittainen soveltaminen (yksinkertaisesti)

Käyttäkää bind-metodia täyttämään alussa olevia argumentteja etukäteen tai pientä nuolikäärettä lukitsemaan arvot ja this-arvo.

// Partial application: pre-fill arguments
function add(a, b, c) { return a + b + c; }

// Using bind: pre-fill a=10
const add10 = add.bind(null, 10);
console.log("add10(1,2):", add10(1, 2)); // 13

// Using an arrow wrapper: pre-fill prefix
const labelHi = function (obj) {
  return function () { return obj.label("Hi"); };
}(user);

console.log("arrow partial:", labelHi()); // "Hi:Ayla"
Metodien irrottamisen sudenkuopat ja osittainen soveltaminen — kuvitus 5

Käytännön mallit

Vinkkejä:

  • Irrotetut metodit: käyttäkää bind-metodia kerran ja käyttäkää tulosta uudelleen.
  • Yksittäiset kutsut: käyttäkää call- tai apply-metodia.
  • Tarvitsetteko etukäteen täytettyjä argumentteja? Käyttäkää bind-metodia tai pientä nuolikäärettä.
  • Pitäkää apufunktiot pieninä ja nimetkää ne selkeästi.
Metodien irrottamisen sudenkuopat ja osittainen soveltaminen — kuvitus 6

bind vai call/apply – tietovisa

Pikatarkistus: Säilyttäkää this ja täyttäkää argumentteja etukäteen.

Metodien irrottamisen sudenkuopat ja osittainen soveltaminen — kuvitus 7

Kertaus

Kertaus: Funktion irrottaminen kadottaa this-arvon. Käyttäkää call- tai apply-metodia yksittäisiin kutsuihin ja bind-metodia this-arvon sitomiseen ja uudelleenkäyttöön. Osittaiseen soveltamiseen voitte käyttää bind-metodia tai pientä nuolifunktiota arvojen täyttämiseen etukäteen.

Metodien irrottamisen sudenkuopat ja osittainen soveltaminen — kuvitus 8
Aloita maksutta

Opi JavaScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
59
Oppitunnit
200

Usein kysytyt kysymykset

Onko oppitunti ”Metodien irrottamisen sudenkuopat ja osittainen soveltaminen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa JavaScript Academy-oppimispolun 3 oppituntia, myös oppitunnin “Metodien irrottamisen sudenkuopat ja osittainen soveltaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. JavaScript Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Metodien irrottamisen sudenkuopat ja osittainen soveltaminen”?

Korjaa metodien irrottaminen call-, apply- ja bind-metodeilla ja opi pienet osittaisen soveltamisen mallit bindillä ja wrapper-nuolilla Harjoittelet JavaScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni JavaScript Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin JavaScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/3.

Kuinka kauan ”Metodien irrottamisen sudenkuopat ja osittainen soveltaminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä JavaScript Academy-oppitunnilla?

Kyllä. Jokainen JavaScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Leksikaalinen ja dynaaminen this, nuolifunktiot uudelleen
  2. Metodien irrottamisen sudenkuopat ja osittainen soveltaminen
  3. Funktionaaliset vaihtoehdot — kontekstin välitys, sulkeumat ja pienet apufunktiot
← Takaisin: JavaScript Academy