2010-12-08 5 views
1

J'ai du mal à essayer de faire fonctionner cela. J'essaie d'utiliser le modèle d'observateur. Je souhaiterais pouvoir exécuter un nombre arbitraire de fonctions sur l'événement select change. Je continue d'obtenir une erreur 'Publisher.protoype' est null ou pas un objet. Qu'est-ce que je fais mal?Problème avec la propriété de prototype javascript

 function Publisher(){ 
      this.subscribers = []; 
     } 

     Publisher.protoype.deliver = function(data){ 
      this.subscribers.forEach(
       function(fn){ 
        fn(data); 
       } 
      ); 
      return this; 
     } 

     Function.prototype.subscribe = function(publisher){ 
      var that = this; 
      var AlreadyExists = publisher.subscribers.some(
       function(el){ 
        if (el == that){ 
         return; 
        } 
       } 
      ); 
      if(!AlreadyExists){ 
       publisher.subscribers.push(this); 
      } 
      return this; 
     } 

     Function.prototype.unsubscribe = function(publisher){ 
      var that = this; 
      publisher.subscribers = publisher.subscribers.filter(
       function(el){ 
        if(el != that){ 
         return el; 
        } 
       } 
      ); 
      return this; 
     } 
     var EventPublisher = new Publisher();  
     var SelectChange = function(data){alert("hello")}; 
     SelectChange.subscribe(EventPublisher); 
     function onSelectChange(oSelect){ 
      EventPublisher.deliver(oSelect); 
     } 

    </script> 

</head> 

<body> 
    <form name="Tester" action="Tester" method="post" enctype="application/x-www-form-urlencoded"> 
     <select name="selecter" onchange="Javascript:onSelectChange(this)"> 
      <option name="Shane" value="Shane"> 
       Shane 
      </option> 

      <option name="Shane2" value="Shane2"> 
       Shane2 
      </option> 
     </select><input type="submit"><input type="reset"> 
    </form> 
</body> 
</html> 

Répondre

2

Vous avez une faute de frappe: Publisher.protoype.deliver manque un 't'.

+0

Eh bien, il mérite une gifle! : P Merci pour ça! – Shane

+0

@Shane - manque un t dans ce commentaire aussi. Peut vouloir faire vérifier votre clavier;) –

0

Publisher.protoype est définitivement nul ou pas un objet. Peut-être que vous vouliez taper Publisher.prototype.

Questions connexes