Salut !
Bon, c'est pas un problème en soi, juste une curiosité présente sur les moteurs JS TraceMonkey et V8 (le code complet ne fonctionnant pas avec JScript et Carkan). Donc à tester sous Firefox-like ou Chromium-like.
En gros, le même code écrit de 2 manières légèrement différentes fonctionne correctement ou pas.
Le code en question (à insérer dans une page vierge) :
Le code est censé affiché 2 "toto". Toto est un objet héritant d'un nœud DOM (un div en l'occurrence). L'instance toto de Toto est donc un objet représentant une instance non seulement d'Objet, mais également (entre autre) de HTMLDivElement. Donc à même de pouvoir intégrer un nœud body.
Dans la méthode init de l'objet Toto, le premier appendChild ne pose pas de problème, tandis que le second (qui n'est qu'une décomposition du précédent appendChild sur 2 lignes) renvoi une erreur (Node cannot be inserted at the specified point in the hierarchy" code: "3 sous Firefox).
Et je me demandais simplement si quelqu'un avait une explication à ce comportement étrange.
Modifié par MacIntoc (12 Feb 2010 - 09:37)
Bon, c'est pas un problème en soi, juste une curiosité présente sur les moteurs JS TraceMonkey et V8 (le code complet ne fonctionnant pas avec JScript et Carkan). Donc à tester sous Firefox-like ou Chromium-like.
En gros, le même code écrit de 2 manières légèrement différentes fonctionne correctement ou pas.
Le code en question (à insérer dans une page vierge) :
var Toto=function(){
var toto=this;
var init=function(){
//on insère un nœud text dans le div qu'on insert dans le body
document.body.appendChild(toto.appendChild(document.createTextNode('toto')));
//on insère un nœud text dans le div...
toto.appendChild(document.createTextNode('toto'));
//...qu'on insert dans le body
document.body.appendChild(toto);
}
init();
}
var init=function(){
Toto.prototype=document.createElement('div'); //Toto hérite d'un noeud div
var toto=new Toto(); //toto est donc une instance de Toto mais aussi de HTMLDivElement précédemment créé
}
window.addEventListener('load', init, false);
Le code est censé affiché 2 "toto". Toto est un objet héritant d'un nœud DOM (un div en l'occurrence). L'instance toto de Toto est donc un objet représentant une instance non seulement d'Objet, mais également (entre autre) de HTMLDivElement. Donc à même de pouvoir intégrer un nœud body.
Dans la méthode init de l'objet Toto, le premier appendChild ne pose pas de problème, tandis que le second (qui n'est qu'une décomposition du précédent appendChild sur 2 lignes) renvoi une erreur (Node cannot be inserted at the specified point in the hierarchy" code: "3 sous Firefox).
Et je me demandais simplement si quelqu'un avait une explication à ce comportement étrange.
Modifié par MacIntoc (12 Feb 2010 - 09:37)