Az alábbi megjelenítésben
Két tömbobjektum létezik (cars & bikes), amelyek szintaxissal vannak létrehozva,
var cars = new Array("Saab", "Volvo", "BMW"); var bikes = ["Honda", "Yamaha"];
akiknek [[Class]] tulajdonság értéke Array.
Ezenkívül van még Array.prototype is, amely teljesen funkcionális tömb, mint alább látható,
> Object.prototype.toString.call(Array.prototype); "[object Array]" > Array.prototype[0] = "Volvo"; "Volvo" > Array.prototype[1] = "BMW"; "BMW" > Array.prototype.length; 2
Általában, ha valamit felhelyez a prototype fájlra, az objektum minden példánya megosztja a ugyanazok a tulajdonságok.
Kérdés:
length tulajdonsággal tagként, Mi az ötlet a Array.prototype teljesen működőképes tömb?
Megjegyzések
több, mint Object? Inkább abban az értelemben, hogy lehetőséget kínálunk az elemek tárolására.
[42] lényegében ugyanaz, mint a { "0": 42 }, de más prototípussal rendelkezik, és ez a funky length tulajdonság. length tulajdonsággal, amely növekszik az objektumban tárolt minden tulajdonság után. Itt mondom, hogy a Array.prototype teljes mértékben tömb. Válasz
Az Array-prototípus maga is egy teljesen funkcionális tömb, mert tartalmaznia kell mindazon funkciókat, amelyek szükségesek ahhoz, hogy egy objektum tömbként funkcionáljon. Az Array-példányok minden funkciójukat a prototípuson keresztül öröklik.
Az Array prototípus objektum maga egy tömb; [[Osztálya]] “tömb”, hossztulajdonsággal rendelkezik (amelynek kezdeti értéke +0), valamint a 15.4.5.1. szakaszban leírt speciális [[DefineOwnProperty]] belső módszerrel.
megjegyzések
- De a
lengthtulajdonság példányszintű tulajdonság. Minden tömbpéldánynak megvan a magalengthértéke. Miért helyezné el alengthtulajdonságot aArray.prototypehelyre? Érdemes lennelengthtulajdonságot elhelyezni aArraykonstruktor funkcióban, a példányosításkor minden példánynak meg lesz a magalengthtulajdonság, amely a tömb hosszát jelzi. De aArraykonstruktor függvénylengthtulajdonsága a konstruktor függvény által elvárt argumentumok számát jelöli - @overexchange: Az objektumok nem nem örökölheti a tulajdonságokat a konstruktortól, csak a prototípustól. Ezért az Array.length nincs kapcsolatban az Array.prototype.length-rel.
- @JacquesB Ez azt jelenti, hogy a
lengthaz összes tömbpéldány megosztott tulajdonsága, és amint egy példány módosítja a sajátlengthtulajdonságát, a megosztottlengthárnyékolva lesz, és ezért haszontalan (mert minden számtani művelet árnyékot eredményez előfordul, pl.x.length++valójábanx.length = x.length + 1). Tehát szerinted ez a tulajdonság az egyetlen, hogy az összes tömbpéldány kezdetilengthtulajdonságot kapjon? - Minden tömbobjektumnak van
lengthtulajdonság, amely semmiképpen sem származik aArray.prototype.length-ből.Csak próbálja meg beállítani aArray.prototype[10] = 42beállítást, amellyel aArray.prototype.lengthértéke 11, de természetesen az újonnan létrehozott tömbök ezt nem veszik fel. Ők öröklik az elemet – próbálkozzon[][10]. Alig kívánatos viselkedés. Bármi is lehet az oka annak, hogy az Array.prototype tömb legyen, alengthsemmi köze hozzá. - Miért ' ez egy közönséges objektum, amelynek összes tulajdonsága, például a push stb. megvalósítva van, így a tömbpéldány örökli tőle?
arraynem működik teljesen? " És úgy gondolom, hogy a válasz erre magától értetődő: ugyanazokból az okokból, amelyek miatt az osztály funkcionalitását elvont osztályra és osztályra osztja, amely ez.