deux "functions" qui collapse

Le
unbewusst.sein
j'ai, un mvc avec :
function Model() // Observable + State
{

// Notify the observers to update
function Notify()
{
for( var i in this.observers )
{
this.observers[i].Update( this );// PROBLEME ICI
}
}
this.Notify=Notify;


}

et, d'autre part je souhaite ajouter une/des méthode/s à l'objet Array :
Array.prototype.include=function(s){
for(var i=0,l=this.length;i<l;i++){if(this[i]s){return true;}}
return false;
}

bien sûr, j'ai testé "à part" cette méthode #include, ça roule, MAIS
avec mon Model() plus haut, j'obtiens l'erreur suivante :
Uncaught TypeError: Object function (s){
for(var i=0,l=this.length;i<l;i++){if(this[i]s){return true;}}
return false;
} has no method 'Update'
qui met en cause la ligne où j'ai écrit :
this.observers[i].Update( this );// PROBLEME ICI

je ne pige pas du tout pourquoi sinon, qu'il faudrait faire gaffe à
l'ordre dans lequel on ajoute des méthodes par #prototype ?


--
« L'amour, c'est quand on rencontre quelqu'un
qui vous donne de vos nouvelles. »
(André Breton)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
unbewusst.sein
Le #23862741
Une Bévue
j'ai, un mvc avec :
function Model() // Observable + State
{
...
// Notify the observers to update
function Notify()
{
for( var i in this.observers )
{
this.observers[i].Update( this );// PROBLEME ICI
}
}
this.Notify=Notify;

...
}

et, d'autre part je souhaite ajouter une/des méthode/s à l'objet Array :
Array.prototype.include=function(s){
for(var i=0,l=this.length;i<l;i++){if(this[i]===s){return true;}}
return false;
}

bien sûr, j'ai testé "à part" cette méthode #include, ça roule, MAIS
avec mon Model() plus haut, j'obtiens l'erreur suivante :
Uncaught TypeError: Object function (s){
for(var i=0,l=this.length;i<l;i++){if(this[i]===s){return true;}}
return false;
} has no method 'Update'
qui met en cause la ligne où j'ai écrit :
this.observers[i].Update( this );// PROBLEME ICI

je ne pige pas du tout pourquoi sinon, qu'il faudrait faire gaffe à
l'ordre dans lequel on ajoute des méthodes par #prototype ?



Un certain "Richard Cornford" m'a donné la réponse sur
"comp.lang.javascript" (Message-ID:
ça provient de la boucle for :
for( var i in this.observers )

comme this.observers est une Array et que j'ai ajouté la méthode
#include à cette Array, le supposé objet this.observers[include] n'a pas
de méthode Update...

j'ai changé la boucle en :
for( var i = 0, l = this.observers.length; i < l; i++ ) {
// et ça roule !!!


--
« Chez un homme politique, les études c'est quatre ans de droit,
puis toute une vie de travers. »
(Coluche)
Mickaël Wolff
Le #23874861
On 13/10/11 14:01, Une Bévue wrote:
j'ai changé la boucle en :
for( var i = 0, l = this.observers.length; i< l; i++ ) {
// et ça roule !!!



Selon la version de JS que tu requiert, tu peux utiliser
Array.forEach pour ça. :)
Une Bévue
Le #23874991
Le 17/10/2011 01:16, Mickaël Wolff a écrit :
On 13/10/11 14:01, Une Bévue wrote:
j'ai changé la boucle en :
for( var i = 0, l = this.observers.length; i< l; i++ ) {
// et ça roule !!!



Selon la version de JS que tu requiert, tu peux utiliser
Array.forEach pour ça. :)



ah oui ?
justement je comptaot l'implémenter...

ca se requert comment une version spécifique de JS et quelle est la
verion à partir de laquelle le #forEach est implémenté ?

merci pour l'info !
Mickaël Wolff
Le #23880851
On 17/10/11 06:51, Une Bévue wrote:

ca se requert comment une version spécifique de JS et quelle est la
verion à partir de laquelle le #forEach est implémenté ?



Il faut le spécifier dans la balise script. Mais attention, il faut
que le navigateur le supporte.


Au fait, je vois que tu utilise beaucoup l'augmentation des types. Si
tu envisages d'utiliser jQuery, arrête de suite. Tout au moins
d'augmenter Object, car jQuery a un bogue qui ne sera jamais corrigé
(ils prétendent que c'est une fonctionalité).
unbewusst.sein
Le #23881141
Mickaël Wolff

Il faut le spécifier dans la balise script. Mais attention, il faut
que le navigateur le supporte.




OK, merci beaucoup.

Au fait, je vois que tu utilise beaucoup l'augmentation des types. Si
tu envisages d'utiliser jQuery, arrête de suite. Tout au moins
d'augmenter Object, car jQuery a un bogue qui ne sera jamais corrigé
(ils prétendent que c'est une fonctionalité).



Ah non, pas du tout, justement j'évite absolument...

--
« L'humanité qui devrait avoir six mille ans d'expérience,
retombe en enfance à chaque génération. »
(Tristan Bernard)
Publicité
Poster une réponse
Anonyme