1

「理解に問題があります。コードの一部:

       //constructor
       function Widget (options) {            
        };

       //return the string
        Widget.prototype._addEditFormString = function (val) {
            return "<input type='text' value='" + val + "' >";                
        } 
        //initializing method
        Widget.prototype.init = function () {
            var addRowButton = document.getElementsByName("addRow")[0];              
            addRowButton.addEventListener("click", this.addRow, false);                
        };
        //this context in this method still confusing me
        Widget.prototype.addRow = function () {    
            console.log(this._addEditFormString);//Uncaught TypeError: Object #<HTMLInputElement> has no method '_addEditFormString'                  
        }  
        var wid = new Widget();

         wid.init();

問題 - init() メソッドでイベント リスナー (addRow メソッド) を追加しますが、addRow メソッドではコンストラクター クラスの "this" をキャッチする方法がわかりません。_addEditFormString() メソッドを呼び出したいのですが、"Uncaught TypeError : オブジェクト [オブジェクト Window] にはメソッド '_addEditFormString' がありません。Widget.prototype._addEditFormString なしでそれを修正するにはどうすればよいですか? それともその唯一の解決策ですか?ありがとう。

4

1 に答える 1

1

問題は、イベント ハンドラーのコンテキストがウィンドウであり、Widget.

変化する

Widget.prototype.init = function () {
     var addRowButton = document.getElementsByName("addRow")[0];              
     addRowButton.addEventListener("click", this.addRow, false);                
};

Widget.prototype.init = function () {
      var _this = this;
      var addRowButton = document.getElementsByName("addRow")[0];              
      addRowButton.addEventListener("click", function(){_this.addRow()}, false);                
};

コメントであなたの質問について編集してください:

あなたが欲しいようです

Widget.prototype._addEditFormString.call(this);
于 2013-03-06T14:52:40.010 に答える