2010-12-08 10 views
1

これを実行しようとして問題があります。私はオブザーバーパターンを使用しようとしています。私は、選択変更イベントで仲裁量の関数を実行できるようにしたいと考えています。私は 'Publisher.protoype'がヌルであるかオブジェクトではないというエラーが出ています。私は間違って何をしていますか?プロトタイププロパティの問題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> 

答えて

2

あなたはタイプミスを持っている:Publisher.protoype.deliverは 'T' が不足しています。

+0

まあ、それは顔を叩く価値がある! :Pありがとう! – Shane

+0

@Shane - そのコメントにもtがありません。あなたのキーボードをチェックしたいかもしれません;) –

0

Publisher.protoypeは、間違いなくnullまたはオブジェクトではありません。おそらく、Publisher.prototypeと入力することを意味します。