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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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 :
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


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 ?