8

これは私の最後の質問からのフォローアップの質問です。

シンプルな JavaScript プロトタイプの問題

私は JavaScript を使用するのに少し慣れprototypeていないため、2 回目の投稿で申し訳ありません。

idクリックした要素を配列に代入したいthis.name

task.prototype.init=function(){  
      this.name=[];  //this.name array has to be defined here

        for (var i; i<5; i++){
            var Link=document.createElement('a');
                Link.innerHTML='click';
                Link.id=value[i];   //I want to assign the value to the this.name array
                Link.href='#'
                Link.onclick=this.changeName;
                document.body.appendChild(Link);
         }
}
task.prototype.changeName=function(){  

     //How do I push the this.id to the property this.name?

     //the code below won't work because this refer to the <a> element. 
     this.name.push(this.id);     

    return false;
    }

タスクのヒントはありますか?

4

2 に答える 2

15

あなたのプロトタイプは問題ありません。問題は、thisイベント ハンドラーが常にイベントをトリガーした要素であるということです。JavaScript では、this関数内の の値は、関数の呼び出し方法によって異なります

特定の値にバインドする場合thisは、バインドされた関数をFunction.prototype.bind次のように作成できます。

var newChangeName = this.changeName.bind(this);
Link.onclick = newChangeName;

ただし、これbindは IE9+ のみです。回避策は次のとおりです。

var that = this;
Link.onclick = function() {
    that.changeName();
};

(スタイル ノート:linkの代わりに使用Linkします。js の規則では、大文字のイニシャルをコンストラクターに残すことになっています)。

于 2012-12-21T20:32:35.040 に答える
1

コールバックに必要なbind設定に使用します。thischangeName

Link.onclick=this.changeName.bind(this);
于 2012-12-21T20:34:01.013 に答える