-1

(プロパティ値の設定)と:の間に違いはありますか?

var obj = {
    getData: function ()
    {
        this.age = 34      //notice this
    }
}
obj.getData();
alert(obj.age) //34

vs

var obj = {
    getData: function ()
    {
        obj.age = 34     //notice obj
    }
}
obj.getData();
alert(obj.age) //34

それぞれをいつ使用する必要がありますか?

4

2 に答える 2

6

これらの限られた状況では両方とも「機能」しますが、前者は(IMHO)強く好まれます。

可能な限り、オブジェクトは、宣言で指定された名前で自分自身を参照するべきではありません。

を使用すると、オブジェクトに別のエイリアスが割り当てられて再利用された場合でも、オブジェクトが自分自身を正しく参照するthisことが保証されます。obj同様に、名前を変更する場合objは、一度だけ変更する必要があります。

于 2013-02-04T16:13:10.063 に答える
1

これを行う:

getData: function ()
{
    this.age = 34      //notice this
}

次の利点があります。

  1. 名前を別のものに変更する必要がある場合でもobj、オブジェクトを として参照するため、関数を変更する必要はありませんthis

  2. より移植性があります。別のオブジェクトで同じ機能が必要な場合は、コピー/貼り付けが簡単です。

クリック ハンドラについて

そうは言っても、コードがクリック ハンドラで使用される場合は注意が必要です。例えば:

var obj = {
    value: 'hello world',
    doSomething: function ()
    {
        alert(this.value);
    }
}

// find first <div> on the page and attach click handler
var firstDiv = document.getElementsByTagName('div')[0];
firstDiv.addEventListener('click', obj.doSomething, false);

<div>をクリックすると、 が呼び出されますがobj.doSomething、オブジェクトがthis参照されるようになりましたwindow。これは予期しないことであり、コードは「未定義」と警告します。

これを修正するには、ヘルパー関数を記述する必要があります。

firstDiv.addEventListener('click', function() {
    obj.doSomething();
}, false);
于 2013-02-04T16:15:05.253 に答える