0

この問題に何度か遭遇しましたが、親オブジェクトのコンテキストで anon 関数を「this」にバインドしなくても解決できるかどうか疑問に思っています。

これが私の状況です:

私は配列のようなオブジェクトを持っています。それを「numline」と呼びましょう。これは「each」メソッドを実装しています。オブジェクトの別のインスタンスに含まれています。「numtank」と呼びましょう。現在のコードは次のようになります。

function Numtank(numline) {
    this.numline = numline;
};
Numtank.prototype.charForElem(elem) {
    return "Number: " + elem;
}
Numtank.prototype.toString() {
    var str = "";
    this.numline.each(function(elem) {
        str += this.charForElem(elem); //But 'this' is called in the contex of the 'numline' instance, which dosen't (and shouldn't) have the charForElem class. 
    });

    return str;
}

var tank = new Numtank(arbatraryNumline);
tank.toString(); //Uncaught ReferenceError: charFromElem is not defined in numline

「Java の動作に似ている」と尋ねると、Java ではどの「これ」を使用するかを指定するために「これ」の前にクラス名を追加する方法を意味します。

anonomouns 関数をこれにバインドすることなく、これを回避する方法はありますか?

4

2 に答える 2

2

一般的に行われることは、と呼ばれる参照を保持することselfです。これが最も一般的な方法です。

Numtank.prototype.toString() {
  var self = this, str = "";
  this.numline.each(function(elem) {
    str += self.charForElem(elem);
  });
  return str;
}
于 2012-06-04T19:07:21.150 に答える
0

thisのコピーを別の変数に保存できます。

var oldThis = this;

変数は、ネストされたコールバック関数に表示されます。

于 2012-06-04T19:04:41.007 に答える