Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu. Loe rohkem.

JavaScripti puhverserveri objekt võimaldab teil pealt kuulata ja kohandada teise objekti käitumist ilma originaali muutmata.

Puhverserveri objekte kasutades saate andmeid kinnitada, pakkuda lisafunktsioone ning juhtida juurdepääsu atribuutidele ja funktsioonidele.

Siit saate teada, kuidas puhverserveriobjekte kasutatakse ja kuidas saate neid JavaScriptis luua.

Puhverserveri objekti loomine

JavaScriptis saate luua puhverserveri objekte kasutades Puhverserverkonstruktor. Sellel konstruktoril on kaks argumenti: a sihtmärk objekt puhverserveri ümber mähkimiseks ja a käitleja objekt, mille omadused määravad puhverserveri käitumise toimingute tegemisel.

See võtab need argumendid ja loob objekti, mida saate sihtobjekti asemel kasutada. See loodud objekt saab ümber määratleda põhitoimingud, nagu atribuutide hankimine, seadistamine ja määratlemine. Neid puhverserveri objekte saate kasutada ka atribuutide juurdepääsude logimiseks ja sisendite kinnitamiseks, vormindamiseks või puhastamiseks.

instagram viewer

Näiteks:

konst originaalobjekt = {
foo: "baar"
}

konst töötleja = {
saada: funktsiooni(sihtmärk, vara){
tagasi sihtmärk[omadus];
},
komplekt: funktsiooni(sihtmärk, vara, väärtus){
sihtmärk[omadus] = väärtus;
}
};

konst puhverserver = uusPuhverserver(originaalObjekt, käitleja)

See kood loob sihtobjekti, originaalobjekt, ühe varaga, fooja käitleja objekt, käitleja. Käitlejaobjekt sisaldab kahte omadust, saada ja seatud. Neid omadusi nimetatakse lõksudeks.

Puhverserveri objekti lõks on funktsioon, mida kutsutakse välja iga kord, kui sooritate puhverserveri objektiga määratud toimingu. Lõksud võimaldavad teil puhverserveri objekti käitumist pealt kuulata ja kohandada. Atribuudile juurdepääs puhverserveri objektilt kutsub esile saada trap ja puhverserveri objekti atribuudi muutmine või manipuleerimine kutsub esile seatud lõks.

Lõpuks loob kood puhverserveri objekti Puhverserver konstruktor. See möödub originaalobjekt ja käitleja vastavalt sihtobjektiks ja käitlejaks.

Puhverserveri objektide kasutamine

Puhverserveri objektidel on JavaScriptis mitu kasutust, millest mõned on järgmised.

Funktsionaalsuse lisamine objektile

Saate kasutada puhverserveri objekti olemasoleva objekti mähkimiseks ja uute funktsioonide lisamiseks, nagu logimine või vigade käsitlemine, ilma algset objekti muutmata.

Uute funktsioonide lisamiseks peate kasutama Puhverserver konstruktorit ja määratlege üks või mitu lõksu tegevuste jaoks, mida soovite katkestada.

Näiteks:

konst userObject = {
eesnimi: "Kennedy",
perekonnanimi: "Martins",
vanus: 20,
};

konst töötleja = {
saada: funktsiooni(sihtmärk, vara){
konsool.log("Kinnisvara saamine"${property}"`);
tagasi sihtmärk[omadus];
},
komplekt: funktsiooni(sihtmärk, vara, väärtus){
konsool.log("Omaduse määramine"${property}" hindama "${value}"`);
sihtmärk[omadus] = väärtus;
},
};

konst puhverserver = uusPuhverserver(userObject, handler);

konsool.log (puhverserver.eesnimi); // Kinnisvara "eesnimi" saamine Kennedy
konsool.log (proxy.lastName); // Kinnisvara "perenimi" hankimine Martins
puhverserver.vanus = 23; // Atribuudi seadistamine "vanus" hindama "23"

See koodiplokk lisab funktsioone puhverserveri lõksude kaudu, saada ja seatud. Nüüd, kui proovite juurdepääsu atribuudile või seda muuta userObject, logib puhverserver enne atribuudile juurdepääsu või selle muutmist esmalt teie toimingu konsooli.

Andmete kinnitamine enne objektile seadmist

Saate kasutada puhverserveri objekte andmete kinnitamiseks ja enne nende objektile määramist veenduda, et need vastavad teatud kriteeriumidele. Saate seda teha, määratledes valideerimisloogika punktis a seatud lõksus käitleja objektiks.

Näiteks:

konst userObject = {
eesnimi: "Kennedy",
perekonnanimi: "Martins",
vanus: 20,
};

konst töötleja = {
saada: funktsiooni(sihtmärk, vara){
konsool.log("Kinnisvara saamine"${property}"`);
tagasi sihtmärk[omadus];
},
komplekt: funktsiooni(sihtmärk, vara, väärtus){
kui (
vara "vanus" &&
tüüp väärtus == "number" &&
väärtus > 0 &&
väärtus <120
) {
konsool.log("Omaduse määramine"${property}" hindama "${value}"`);
sihtmärk[omadus] = väärtus;
} muidu {
viskamauusViga("Vigane parameeter. Palun vaadake üle ja parandage.");
}
},
};

konst puhverserver = uusPuhverserver(userObject, handler);
puhverserver.vanus = 21;

See koodiplokk lisab valideerimisreeglid seatud lõks. Saate määrata mis tahes väärtuse vanus kinnistul a userObject näiteks. Kuid lisatud valideerimisreeglitega saate määrata atribuudile vanus uue väärtuse ainult siis, kui see on arv, mis on suurem kui 0 ja väiksem kui 120. Mis tahes väärtus, mida proovite seada vanus atribuut, mis ei vasta nõutavatele kriteeriumidele, käivitab vea ja prindib veateate.

Juurdepääsu juhtimine objekti omadustele

Objekti teatud atribuutide peitmiseks saate kasutada puhverserveri objekte. Tehke seda, määratledes piirangute loogika saada lõksud atribuutidele, millele soovite juurdepääsu juhtida.

Näiteks:

konst userObject = {
eesnimi: "Kennedy",
perekonnanimi: "Martins",
vanus: 20,
telefon: 1234567890,
email: "[email protected]",
};

konst töötleja = {
saada: funktsiooni(sihtmärk, vara){
kui (kinnistu "telefon" || vara "e-post") {
viskamauusViga("Juurdepääs teabele keelatud");
} muidu {
konsool.log("Kinnisvara saamine"${property}"`);
tagasi sihtmärk[omadus];
}
},
komplekt: funktsiooni(sihtmärk, vara, väärtus){
konsool.log("Omaduse määramine"${property}" hindama "${value}"`);
sihtmärk[omadus] = väärtus;
},
};

konst puhverserver = uusPuhverserver(userObject, handler);

konsool.log (puhverserver.eesnimi); // Kinnisvara "eesnimi" saamine Kennedy
konsool.log (proxy.email); // Viskab viga

Ülaltoodud koodiplokk lisab teatud piirangud saada lõks. Esialgu pääsete ligi kõigile saadaolevatele atribuutidele aadressil userObject. Lisatud reeglid takistavad juurdepääsu tundlikule teabele, nagu kasutaja meiliaadress või telefon. Kui proovite juurdepääsu ühelegi neist atribuutidest, ilmneb tõrge.

Muud puhverserveri lõksud

The saada ja seatud lõksud on kõige levinumad ja kasulikumad, kuid on veel 11 JavaScripti puhverserveri lõksu. Nemad on:

  • kohaldada: kohaldada trap töötab, kui kutsute puhverserveri objekti funktsiooni.
  • konstrueerida: konstrueerida trap töötab, kui kasutate uut operaatorit puhverserveri objektist objekti loomiseks.
  • Kustuta Property: Kustuta Property lõks töötab, kui kasutate kustutada operaator, et eemaldada puhverserveri objektist atribuut.
  • on - on lõks töötab, kui kasutate sisse operaator, et kontrollida, kas puhverserveri objektil on atribuut.
  • ownKeys - ownKeys lõks töötab, kui helistate kas Object.getOwnPropertyNames või Object.getOwnPropertySymbols funktsioon puhverserveri objektil.
  • getOwnPropertyDescriptor - getOwnPropertyDescriptor lõks töötab, kui helistate Object.getOwnPropertyDescriptor funktsioon puhverserveri objektil.
  • defineProperty - defineProperty lõks töötab, kui helistate Object.defineProperty funktsioon puhverserveri objektil.
  • vältima laiendusi - vältima laiendusi lõks töötab, kui helistate Object.preventExtensions funktsioon puhverserveri objektil.
  • on Laiendatav - on Laiendatav lõks töötab, kui helistate Object.isExtensible funktsioon puhverserveri objektil.
  • hanki PrototypeOf - hanki PrototypeOf lõks töötab, kui helistate Object.getPrototypeOf funktsioon puhverserveri objektil.
  • setPrototypeOf - setPrototypeOf lõks töötab, kui helistate Object.setPrototypeOf funktsioon puhverserveri objektil.

Nagu seatud ja saada püünised, saate neid püüniseid kasutada, et lisada oma objektile uusi funktsionaalsuse, valideerimise ja juhtimise kihte ilma originaali muutmata.

Puhverserveri objektide miinused

Puhverserveri objektid võivad olla võimas tööriist objektile kohandatud funktsioonide lisamiseks või valideerimiseks. Kuid neil on ka mõned potentsiaalsed puudused. Üheks selliseks puuduseks on raskused silumisel, kuna kulisside taga toimuvat võib olla raske näha.

Puhverserveri objekte võib olla ka keeruline kasutada, eriti kui te pole nendega tuttav. Enne puhverserveri objektide kasutamist oma koodis peaksite neid puudusi hoolikalt kaaluma.