Kaltaisesi lukijat auttavat tukemaan MUO: ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion. Lue lisää.

JavaScript-välityspalvelinobjektin avulla voit siepata ja mukauttaa toisen objektin toimintaa muuttamatta alkuperäistä.

Välityspalvelinobjektien avulla voit vahvistaa tietoja, tarjota lisätoimintoja ja hallita ominaisuuksien ja toimintojen käyttöä.

Ota selvää välityspalvelinobjektien käytöstä ja niiden luomisesta JavaScriptissä.

Välityspalvelinobjektin luominen

JavaScriptissä voit luoda välityspalvelinobjekteja käyttämällä Välityspalvelinrakentaja. Tämä konstruktori käyttää kaksi argumenttia: a kohde vastustaa välityspalvelimen ympärille ja a käsittelijä objekti, jonka ominaisuudet määrittävät välityspalvelimen toiminnan, kun suoritat toimintoja.

Se ottaa nämä argumentit ja luo objektin, jota voit käyttää kohdeobjektin tilalle. Tämä luotu objekti voi määrittää uudelleen ydintoiminnot, kuten ominaisuuksien saamisen, asettamisen ja määrittelyn. Voit myös käyttää näitä välityspalvelinobjekteja omaisuuden käyttöoikeuksien kirjaamiseen ja syötteiden vahvistamiseen, muotoiluun tai puhdistamiseen.

instagram viewer

Esimerkiksi:

konst alkuperäinenObject = {
foo: "baari"
}

konst käsittelijä = {
saada: toiminto(kohde, omaisuus){
palata kohde[ominaisuus];
},
aseta: toiminto(kohde, omaisuus, arvo){
kohde[ominaisuus] = arvo;
}
};

konst välityspalvelin = UusiVälityspalvelin(alkuperäinenObject, käsittelijä)

Tämä koodi luo kohdeobjektin, alkuperäinenObject, yhdellä omaisuudella, foo, ja käsittelijäobjekti, käsittelijä. Käsittelijäobjekti sisältää kaksi ominaisuutta, saada ja aseta. Nämä ominaisuudet tunnetaan ansoina.

Välityspalvelinobjektin trap on toiminto, jota kutsutaan aina, kun suoritat tietyn toiminnon välityspalvelinobjektille. Trapsin avulla voit siepata ja mukauttaa välityspalvelinobjektin toimintaa. Ominaisuuden käyttäminen välityspalvelinobjektista kutsuu saada trap ja välityspalvelinobjektin ominaisuuden muokkaaminen tai manipulointi kutsuu aseta ansa.

Lopuksi koodi luo välityspalvelinobjektin, jossa on Välityspalvelin rakentaja. Se menee ohi alkuperäinenObject ja käsittelijä kohdeobjektina ja käsittelijänä.

Välityspalvelinobjektien käyttäminen

Välityspalvelinobjekteilla on useita käyttötarkoituksia JavaScriptissä, joista jotkin ovat seuraavat.

Toiminnan lisääminen objektiin

Välityspalvelinobjektin avulla voit kääriä olemassa olevan objektin ja lisätä uusia toimintoja, kuten kirjaamisen tai virheiden käsittely, muuttamatta alkuperäistä objektia.

Jos haluat lisätä uusia toimintoja, sinun on käytettävä Välityspalvelin rakentaja ja määritä yksi tai useampi ansa toimille, jotka haluat siepata.

Esimerkiksi:

konst userObject = {
etunimi: "Kennedy",
sukunimi: "Martins",
ikä: 20,
};

konst käsittelijä = {
saada: toiminto(kohde, omaisuus){
konsoli.Hirsi("Hanki omaisuutta"${property}"`);
palata kohde[ominaisuus];
},
aseta: toiminto(kohde, omaisuus, arvo){
konsoli.Hirsi("Ominaisuuden asettaminen"${property}" arvostaa "${value}"`);
kohde[ominaisuus] = arvo;
},
};

konst välityspalvelin = UusiVälityspalvelin(userObject, käsittelijä);

konsoli.log (proxy.firstName); // Omaisuuden "firstName" Kennedy hankkiminen
konsoli.log (proxy.lastName); // Omaisuuden hankkiminen "sukunimi" Martins
välityspalvelin.ikä = 23; // Ominaisuuden asettaminen "ikä" arvostaa "23"

Tämä koodilohko lisää toimintoja välityspalvelinten ansojen kautta, saada ja aseta. Nyt, kun yrität käyttää tai muokata ominaisuutta userObject, välityspalvelinobjekti kirjaa toimintosi ensin konsoliin ennen ominaisuuden käyttöä tai muokkaamista.

Tietojen vahvistaminen ennen niiden asettamista objektiin

Voit käyttää välityspalvelinobjekteja tietojen tarkistamiseen ja varmistaa, että ne täyttävät tietyt ehdot, ennen kuin asetat ne objektiin. Voit tehdä sen määrittämällä validointilogiikan kohdassa a aseta ansassa käsittelijä esine.

Esimerkiksi:

konst userObject = {
etunimi: "Kennedy",
sukunimi: "Martins",
ikä: 20,
};

konst käsittelijä = {
saada: toiminto(kohde, omaisuus){
konsoli.Hirsi("Hanki omaisuutta"${property}"`);
palata kohde[ominaisuus];
},
aseta: toiminto(kohde, omaisuus, arvo){
jos (
omaisuutta "ikä" &&
tyyppi arvo == "määrä" &&
arvo > 0 &&
arvo <120
) {
konsoli.Hirsi("Ominaisuuden asettaminen"${property}" arvostaa "${value}"`);
kohde[ominaisuus] = arvo;
} muu {
heittääUusiVirhe("Väärä syöte. Tarkista ja korjaa.");
}
},
};

konst välityspalvelin = UusiVälityspalvelin(userObject, käsittelijä);
proxy.age = 21;

Tämä koodilohko lisää vahvistussäännöt aseta ansa. Voit määrittää arvolle minkä tahansa arvon ikä omaisuus osoitteessa a userObject ilmentymä. Mutta lisättyjen vahvistussääntöjen avulla voit määrittää uuden arvon ikä-ominaisuudelle vain, jos se on numero, joka on suurempi kuin 0 ja pienempi kuin 120. Mikä tahansa arvo, jonka yrität asettaa ikä ominaisuus, joka ei täytä vaadittuja ehtoja, laukaisee virheen ja tulostaa virheilmoituksen.

Objektin ominaisuuksiin pääsyn hallinta

Voit käyttää välityspalvelinobjekteja piilottaaksesi tietyt objektin ominaisuudet. Tee se määrittämällä rajoituslogiikka saada ansoja kiinteistöille, joihin haluat hallita pääsyä.

Esimerkiksi:

konst userObject = {
etunimi: "Kennedy",
sukunimi: "Martins",
ikä: 20,
puhelin: 1234567890,
sähköposti: "[email protected]",
};

konst käsittelijä = {
saada: toiminto(kohde, omaisuus){
jos (kiinteistö "puhelin" || omaisuutta "sähköposti") {
heittääUusiVirhe("Pääsy tietoihin estetty");
} muu {
konsoli.Hirsi("Hanki omaisuutta"${property}"`);
palata kohde[ominaisuus];
}
},
aseta: toiminto(kohde, omaisuus, arvo){
konsoli.Hirsi("Ominaisuuden asettaminen"${property}" arvostaa "${value}"`);
kohde[ominaisuus] = arvo;
},
};

konst välityspalvelin = UusiVälityspalvelin(userObject, käsittelijä);

konsoli.log (proxy.firstName); // Omaisuuden "firstName" Kennedy hankkiminen
konsoli.log (proxy.email); // Heittää virheen

Yllä oleva koodilohko lisää tiettyjä rajoituksia saada ansa. Aluksi voit käyttää kaikkia saatavilla olevia ominaisuuksia osoitteessa userObject. Lisätyt säännöt estävät pääsyn arkaluontoisiin tietoihin, kuten käyttäjän sähköpostiin tai puhelimeen. Yritetään käyttää jompaakumpaa näistä ominaisuuksista laukaisee virheen.

Muut välityspalvelimet

The saada ja aseta traps ovat yleisimpiä ja hyödyllisimpiä, mutta on olemassa 11 muuta JavaScript-välityspalvelinta. He ovat:

  • Käytä: Käytä trap suoritetaan, kun kutsut välityspalvelinobjektin funktiota.
  • rakentaa: rakentaa trap suoritetaan, kun käytät uutta operaattoria objektin luomiseen välityspalvelinobjektista.
  • Poista omaisuus: Poista omaisuus trap toimii, kun käytät poistaa -operaattoria poistaaksesi ominaisuuden välityspalvelinobjektista.
  • on - on trap toimii, kun käytät sisään -operaattori tarkistaaksesi, onko välityspalvelinobjektissa ominaisuus.
  • omat avaimet - omat avaimet trap toimii, kun soitat joko Object.getOwnPropertyNames tai Object.getOwnPropertySymbols toiminto välityspalvelinobjektissa.
  • getOwnPropertyDescriptor - getOwnPropertyDescriptor ansa juoksee, kun soitat Object.getOwnPropertyDescriptor toiminto välityspalvelinobjektissa.
  • defineProperty - defineProperty ansa juoksee, kun soitat Object.defineProperty toiminto välityspalvelinobjektissa.
  • estää Extensions - estää Extensions ansa juoksee, kun soitat Object.preventExtensions toiminto välityspalvelinobjektissa.
  • on laajennettavissa - on laajennettavissa ansa juoksee, kun soitat Object.isExtensible toiminto välityspalvelinobjektissa.
  • hanki PrototypeOf - hanki PrototypeOf ansa juoksee, kun soitat Object.getPrototypeOf toiminto välityspalvelinobjektissa.
  • setPrototypeOf - setPrototypeOf ansa juoksee, kun soitat Object.setPrototypeOf toiminto välityspalvelinobjektissa.

Kuin aseta ja saada ansoja, voit käyttää näitä trapsia lisätäksesi uusia toiminnallisuuden, vahvistuksen ja ohjauksen tasoja objektiisi muuttamatta alkuperäistä.

Välityspalvelinobjektien haitat

Välityspalvelinobjektit voivat olla tehokas työkalu mukautettujen toimintojen tai validoinnin lisäämiseen objektiin. Mutta niissä on myös joitain mahdollisia haittoja. Yksi tällainen haittapuoli on virheenkorjausvaikeudet, koska voi olla vaikea nähdä, mitä kulissien takana tapahtuu.

Välityspalvelinobjekteja voi myös olla vaikea käyttää, varsinkin jos et tunne niitä. Sinun tulee harkita huolellisesti näitä haittoja, ennen kuin käytät välityspalvelinobjekteja koodissasi.