Javascript és az öröklődés
Üdv.
javascriptben úgy oldottam meg az öröklődést, hogy:na most ez annyi, hogy beleírtam a Function.prototype-ba egy extend függvényt
mindez eddig szép és jó, még azt is beleírtam, hogy a prototypeját a szülőnek másolja le a gyerek prototypejába, meg hogy a gyereknek is lehessen plussz tulajdonságokat hozzáadni a prototypehoz egy object megadásával az extend függvényben..
szóval bővítsük kicsit a dolgot, most a szülő a Range a gyerek pedig a Form:na most itt a Range egy interface az Arrayra, és azért jó, mert ezt tovább lehet örökíteni, az Arrayt viszont elég nehézkes, mivelhogy nem saját függvény, a prototypejában levő függvények sem másolhatóak stb..
a Rangenek a contract függvénye annyit tesz, hogy egy új objectbe másolja be a filter függvénynek megfelelő értékeket.
a Form egy interface a HTML FORM objectre, és mellesleg a Range kiterjesztése, szóval a Form source tulajdonsága egy tömb az adott formban levő inputokról
na ha ez így világos, akkor vázolom a problémát:
ha meghívom a contract függvényt, akkor egy új Form objectet kapok, aminek az elemei a filter által jónak talált elemek, mondjuk legyenek csak a gombok:na most a contract által visszaadott Form object annyiból hibás, hogy a Rangeben alett meghívva, ami pedig azért nem nyerő, mert egyrészt kiesik a header függvény, ami a form mime typeját állítja (nem véletlenül írtam bele a példába), másrészt meg hibaüzi jön.. szóval amit kapunk az csak egy gyűjtemény lesz, a Form tulajdonságai elvesznek, én pedig azt szeretném, hogy megmaradjanak, magyarul a másolatban a .form tulajdonsághoz valahogy be kéne rakni az eredeti form objectet.
Na erre keresek egy általános megoldást, aki felfogta, hogy miről van szó, és tud ilyet, vagy vannak ötletei, az kérem írjon, köszi!
■ javascriptben úgy oldottam meg az öröklődést, hogy:
function szülő(a,b,c)
{
this.source=[a,b,c];
}
var gyerek=szülő.extend(function (a,b,c,d)
{
this.source=[a,b,c,d];
})
mindez eddig szép és jó, még azt is beleírtam, hogy a prototypeját a szülőnek másolja le a gyerek prototypejába, meg hogy a gyereknek is lehessen plussz tulajdonságokat hozzáadni a prototypehoz egy object megadásával az extend függvényben..
szóval bővítsük kicsit a dolgot, most a szülő a Range a gyerek pedig a Form:
function Range()
{
this.source=Array.from(arguments);
}
Range.prototype.contract=function (filter)
{
var results=new this.constructor;
for (var i=0; i<this.source.length; i++)
{
if (filter.call(this,this[i]))
{
results.push(this[i]);
}
});
return results;
}
var Form=Range.extend(function (form)
{
this.form=form;
this.source=Array.from(form.elements);
},
{
disable:function ()
{
for (var i=0; i<this.source.length; i++)
{
this.source[i].setAttribute("disabled",true);
}
},
header:function (mime)
{
this.form.encoding=mime;
}
});
a Rangenek a contract függvénye annyit tesz, hogy egy új objectbe másolja be a filter függvénynek megfelelő értékeket.
a Form egy interface a HTML FORM objectre, és mellesleg a Range kiterjesztése, szóval a Form source tulajdonsága egy tömb az adott formban levő inputokról
na ha ez így világos, akkor vázolom a problémát:
ha meghívom a contract függvényt, akkor egy új Form objectet kapok, aminek az elemei a filter által jónak talált elemek, mondjuk legyenek csak a gombok:
var gombok=new Form(form).contract(function (input)
{
return input.type=="button"?true:false;
})
new this.constructorral;
Na erre keresek egy általános megoldást, aki felfogta, hogy miről van szó, és tud ilyet, vagy vannak ötletei, az kérem írjon, köszi!
Hiba
megoldás