1

ここにアクセスできない理由がわかりませんthat.Friends.name(以下のコードを参照)。

アップデート

JS

function AClass(_Friends) {
  var that = this;
  this.Friends = _Friends;

  this.doSomething = function() {
    console.log(that.Friends.name); // Uncaught TypeError: Cannot read property 'name' of undefined 
  };
}

var A = new AClass({ name: 'toto' });
$('button').click(A.doSomething);

HTML

<button>TRY!</button>

クラスのコントローラーで使用 var that = thisするのは、(この例のように) コールバックでメソッドを呼び出すことに興味があるからです。これを誇りに思っているわけではありません。それを機能させるためのより良い方法はありますか (それは良い考えかもしれません)。 te はthisここで再定義されます) ?

4

2 に答える 2

1

直接渡すdoSomethingことで、オブジェクトから切り離しています。jQuery または jQuery がない場合、これは機能しなくなります。

ただし、確実に動作を停止させるために (それが理にかなっている場合)、jQuery は の値を強制的にハンドラーthis内でクリックされた要素にします。

修正するthisには (笑)、単純に無名関数を使用する必要があります。

$('button').click(function () {
    A.doSomething();
});

ここで、無名関数の値は に強制されますが、関心thisのある の値であるため、実際には気にしませんdoSomething()。これは、まだ にアタッチされており、またはAによって強制されていないため、必要な値です。callapply

var that = thisこれで;は不要です。これはよく使われる JavaScript のイディオム/テクニックなので、私自身は気にしません。

于 2013-05-23T21:16:26.927 に答える
1

Friends外部スコープのローカル変数です。を使用せずに直接アクセスできますthat

console.log(Friends.name);
于 2013-05-23T21:16:35.647 に答える