Hogyan tudok objektum. Funkció () ; féle funkciót létrehozni?
Jelenleg van egy ilyenem:
function valami(obj, param){
}
valami(kivalasztottObjektum, parametereim);
és ezt szeretném átalakítani ilyenre:
kivalasztottObjektum.valami(parametereim);
Saját objektumról van szó? Ha igen, akkor:
objektum.valami = function(parameter) { ... }
Ha pedig osztály, vagy konstruktorfüggvény példánya, tehát úgy hozod létre, hogy "new Tipus()", akkor:
Tipus.prototype.valami = function(parameter) { ... }
Ha nem saját objektum, hanem egy külső modulból származik, vagy beépített, akkor azt nem szabad módosítani, mert nehezen kideríthető hibákat, logikátlannak tűnő viselkedést eredményezhet. Ebben az esetben jobb megoldás az általad elsőként felírt forma.
Vannak library-k, amik lehetőséget adnak a funkcióik kiterjesztésére, pl a jquery a következőképp oldja meg:
$.fn.helloWorld = function() { console.log("hello world"); };
$("valami").helloWorld(); // kiírja, hogy hello world
Erről viszont részleteket mindig a készítő weboldalán, github oldalán, npm oldalán keress.
Ez egy olyan dolog, amit objektumorientált programozásnak nevezünk. Csapj fel egy jóféle leírást és nyálazd át. Mondjuk ezt:
Kérdező: a javascript prototype alapú öröklődést használ, ami azt jelenti, hogy az objektumok nem osztályokból örökölnek, hanem van egy hivatkozásuk egy másik objektumra, ami prototípusként van megjelölve.
Természetesen a prototype-nak is lehet prototype-ja, ha pedig nincs megadva, akkor az Object.prototype lesz az alapértéked (itt van definiálva pl a toString függvény).
Ha egy property-t szeretnél elérni egy objektumon, azt saját magán keresi első körben. Ha nem találja meg, akkor elindul felfelé a prototype láncon, ameddig megtalálja, vagy végigér (Object.prototype prototype-ja null), ilyenkor undefined lesz a property értéke.
Minden függvénynek van egy "prototype" nevű propertyje. Ez nem a függvény prototype-ja, csak egy sima property. Viszont annyiban mégis különleges, ha a függvényt konstruktorként használod, és new-val hozol létre egy példányt belőle, akkor ez a "prototype" nevű property lesz az új objektumod prototype-ja.
function Valami(x) { this.x = x; }
Valami.prototype.hello = function () { console.log("Hello,", this.x); };
var valami = new Valami("world");
valami.hello(); // kiírja, hogy Hello world
// Az osztály konstruktora.
function Osztaly() {
this.value = ""; // Az osztály változója.
// Az osztály egyik funkciója.
this.setValue = function(val) {
this.value = val;
};
// Az osztály másik funkciója.
this.printValue = function() {
document.write(this.value);
};
}
var objektum = new Osztaly(); // Új objektum létrehozása.
objektum.setValue("Hello world!");
objektum.printValue();
sharkxxx: ez félrevezető, mert az nem osztály, hanem konstruktorfüggvény. JS-ben nincsenek olyan osztályok, mint pl Java-ban vagy C#-ban, rengeteg probléma származik abból, ha mégis megpróbáljuk ráerőszakolni az ott teljesen helytálló patterneket.
Persze attól még rendben van, ha konstruktorfüggvényekkel, vagy ES6 "osztályokkal" hozunk létre objektumokat, csak nem szabad elfelejteni, hogy azok nem classical OOP osztályok.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!