Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

deux "functions" qui collapse

5 réponses
Avatar
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)

5 réponses

Avatar
unbewusst.sein
Une Bévue wrote:

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)
Avatar
Mickaël Wolff
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. :)
Avatar
Une Bévue
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 !
Avatar
Mickaël Wolff
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.

<script type='text/javascript;version=1.8'>

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é).
Avatar
unbewusst.sein
Mickaël Wolff wrote:


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

<script type='text/javascript;version=1.8'>



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)