2012-01-13 5 views
2

私はclass (MyClass)のインスタンスを作成するページで、このクラスには2つのメソッドがあります。しかし、私は2つのことやってみたい:(1)、値(2)、情報法やクラスの別のメソッドを呼び出すthis.message jQuery/javascriptでクラスを作成する

  • を設定

    感謝、

    <script type="text/javascript"> 
        $(document).ready(function() { 
         var myClass = new MyClass("MyParam"); 
         $('#Target').click(function (event) { 
          myClass.save("Test"); 
         }); 
        }); 
    </script> 
    
    function MyClass(myParam) { 
        this.myParam = myParam; 
        this.isError = false; 
        this.message = ""; 
    } 
    
    // Define the class methods. 
    MyClass.prototype = { 
        save: function (action) { 
         **(2)** 
        }, 
        information: function (action) { 
         **(1)** 
        } 
    }; 
    

    アップデート1

    Iはinformationdata値以下のコードを実行thisが現在MyClassオブジェクトであるべきで、saveinformation機能内側undifined

    MyClass.prototype = { 
    
        click: function (action) { 
         var myData; 
         $.post(....., $("form").serialize(), 
          function (data) { 
           myData = data; 
          }); 
    
         this.isError = this.information(myData); 
        }, 
    
        information: function (data) { 
         alert(data); 
         return true; 
        } 
    
    }; 
    
  • +1

    プロパティを設定する方法や、ランダムメソッドを呼び出す方法を示す基本的な例です: 'save'の内部:' this.message = action; '。 '情報 'の中に' return this.hasOwnProperty(action)&&この[action] ===' function '&& this [action](); 'をタイプします。あなたの質問はやや曖昧なので、少し違うコードを探している可能性があります。 –

    +0

    おそらく、プロトタイプをオブジェクトリテラルに割り当てるのは、コンストラクタ参照のようなデフォルトの内容を消去しているからです。代わりに、各関数をMyClass.prototype.save = ...&MyClass.prototype.information = ... – robmisio

    答えて

    1

    として示しています。

    saveの中でthis.messageが動作し、informationthis.save()の内部で動作するはずです。

    UPDATE:

    click: function (action) { 
        var myData; 
        $.post(....., $("form").serialize(), 
         function (data) { 
          myData = data; 
         }); 
    
        this.isError = this.information(myData); 
    } 
    

    $.postは、AJAX要求であると非同期に実行されます。つまりthis.isError = this.information(myData);の前に実行され、が終了するので、myDataundefinedです。コールバック内からthis.informationに電話する必要があります。

    コールバックの中で、thisはあなたのMyClassオブジェクトでなくなりました。そのため、参照を保存する必要があります。このように:

    click: function (action) { 
        var that = this; 
        $.post(....., $("form").serialize(), 
         function (data) { 
          that.isError = that.information(data); 
         }); 
    } 
    
    +0

    のような別個のメンバとして追加します。私は、そのクラスの変数にデータコンテンツ(that.isErrorがあるところ)を割り当てたい –

    +0

    @ Kris-I: 'that.isError'は機能しませんか? –

    +0

    お手伝いしていますが、まだ動作していません。私はコードをここに配置します:http://jsfiddle.net/Kris_I/fBjz6/1/(簡単に)文書の準備ができたら、引数に引数を指定してインスタンスを作成し、クラスのメソッドをclickイベントに割り当てます。ボタン。クリックした後、値ビューとisViewErrorを取得したいと思います。 –

    関連する問題