[POO] dérivation / classe Array pour IE
Bonjour à tous.
Soit j'oublie quelque chose d'énorme, soit IE prouve une fois de plus son originalité. Soit une classe HArray dérivée de Array :
1 - code minimaliste pour HArray :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| HArray.prototype = new Array();
// @in src = argument facultatif spécifiant un tableau à copier
function HArray(src) {
if( !!src ) this.copy(src);
}
HArray.prototype.copy = HArray_copy;
// @in src = tableau à copier
function HArray_copy(src) {
g_dbg.addTrace("-------> HArray_copy : src.length = " + src.length)
this.splice(0);
if( !!src ) for( var i = 0; i < src.length; ++ i ) this.push(src[i]);
g_dbg.addTrace("-------> HArray_copy : this.length = " + this.length)
} |
où g_dbg est une instance (variable globale) d'une classe utilitaire qui enregistre les traces, comme le nom de la méthode l'indique, et les restitue ensuite sur demande. Rien de spécial donc.
2 - code de test :
Code:
1 2 3 4 5 6 7 8 9 10 11
| <h1>Vérif IE</h1>
<script language="javascript"><!--
function test1() {
var out = $dyn($id('HArray_TestIE'));
g_dbg.addTrace("test1");
var arr = new HArray(new Array(0, 1, 2, 3, 4, 5));
for(var i = 0; i < g_dbg.getTraces().length; ++ i ) out.setText(g_dbg.getTraces()[i], true, 'br');
}
--></script>
<div id="HArray_TestIE" style="background-color:#F0F0F0"></div>
<button onclick="test1()">test1</button> |
out prend un pointeur encapsulé sur le div 'HArray_TestIE', on initialise un HArray et on écrit les traces dans le div.
Résultat :
3 - traces sous Firefox et Opera conforme à mes attentes :
Citation:
mardi 20 novembre 2007 12:11:25 === test1
mardi 20 novembre 2007 12:11:25 === -------> HArray_copy : src.length = 6
mardi 20 novembre 2007 12:11:25 === -------> HArray_copy : this.length = 6
4 - traces sous IE7 :
Citation:
mardi 20 novembre 2007 12:19:17 === test1
mardi 20 novembre 2007 12:19:17 === -------> HArray_copy : src.length = 6
mardi 20 novembre 2007 12:19:17 === -------> HArray_copy : this.length = 0
:roll:
Conclusion : IE7 ne traite pas correctement Array.push() pour les classes dérivées ???? Avez-vous des éclaircissements là-dessus ou bien est-ce que je fais une grosse bêtise quelque part ? Eventuellement, avez-vous des suggestions pour un wouhorqe heurrahounde ?