2010-09-23 4 views
0

Je ne sais pas pourquoi je reçois un 'b' et non un 'a' quand j'appelle a.get(). Est-ce que quelqu'un peut m'aider?mootools/class/objectinstance ne fonctionne pas

var tclass = new Class({ 
initialize:function(n){ 
    this.options = Object.extend({'name' : n}); 
}, 
get:function(){ 
    return this.options.name; 
} 
}); 

a = new tclass('a'); 
b = new tclass('b'); 
a.get() // b 

Répondre

-1

Ne devriez-vous pas utiliser la ligne d'opérateur new 3?

this.options = (new Object()).extend({'name' : n}); 
+0

non, ce n'est pas correct. il utilise le mootools 1.3 api appelant au prototype d'objet –

+0

OUI bébé, c'est tout (mootools 1.11)! J'ai raté le bois pour les arbres. – sumflow

+0

oh mon cher. Je vais partir maintenant. vérifier l'exemple révisé via les options mixin et mootools 1.11 (à partir http://docs111.mootools.net/Class/Class-Extras.js) –

3

vous devez utiliser la classe d'options comme mixin et setOptions pour faire la fusion correctement:

var tclass = new Class({ 
    Implements: [Options], 
    initialize: function(n) { 
     this.setOptions(n); 
    }, 
    get: function() { 
     return this.options.name; 
    } 
}); 


var a = new tclass({ 
    name: 'a' 
}); 
var b = new tclass({ 
    name: 'b' 
}); 
alert(a.get()); // a 

ayant dit que, dans votre exemple, je reçois une réponse différente - comme prévu - mais via fusionner $ et étendre (fusion ne dissocie): http://www.jsfiddle.net/dimitar/cqd8P/

encore ce qui est le point dans ce que vous avez pas this.options qui existe (vous devez passer sur un objet pour étendre/fusionner avec une autre) . vous pouvez aussi bien le faire:

this.options = { 
    name: n 
}; 

vous voulez vraiment this.setOptions

P.S. pour mootools 1.11 Les implémentations se font différemment:

var tclass = new Class({ 
    initialize: function(n) { 
     this.setOptions(n); 
    }, 
    get: function() { 
     return this.options.name; 
    } 
}); 

tclass.implement(new Options); 

var a = new tclass({ 
    name: 'a' 
}); 
var b = new tclass({ 
    name: 'b' 
}); 
alert(a.get()); // a 
+0

Dimitar vous êtes une machine. –

+0

heh, à peine, mootools obtient comme 3-4 questions par semaine ici, à peine taxer pour épargner 5 minutes et répondre (si vous pensez connaître la réponse de toute façon, c'est), est-ce :) je trouve avoir à considérer les problèmes des autres un excellent moyen d'apprendre –