0

http://jsfiddle.net/9nmfX/

var a = {
    init: function(){
        this.b.c();
    },
    b : {
        constant: 'some constant',
        c: function(){
            alert( this.constant );
        }
    }
}
a.init();

私はしばらくの間 JavaScript を書いています。使っていないことに突然気がつきましたthis。各呼び出しの名前全体を書き出すのは、非常に面倒で時間がかかります。

上記のコードは、thisクロスブラウザ互換の実装ですか、それとも私がこれを間違って使用しているかどうか知っていますか?

4

1 に答える 1

2

はい、クロスブラウザ/プラットフォームです。これは ECMAScript の一部であるため、Javascript のすべての実装で機能します。

this必要なオブジェクトを常に参照するとは限らないことに注意してください。検討:

var func = a.b.c;
func();

によって参照される関数を呼び出しますが、のa.b.c代わりにオブジェクトまたは bethisを参照します。windownulla.b

もう一つの例:

setTimeout(a.init, 1000); // Throws an error and fails after 1 second

しかし:

setTimeout(a.init.bind(a), 1000); // Works as expected and
setTimeout(function(){ a.init(); }, 1000); // Works as expected
于 2013-10-15T20:35:00.100 に答える