< 簡易 XML ビルダ/パーサ | 識別子、文字列または数がありません。 >

September 16, 2010

関数内の this が参照するもの

あー、これはちょっと、今まで誤解してたかも。 this は実行時に評価されるんですね。
function Foo ()
{
    var _getx = function () { return this.x; };

    this.x = 'apple';
    this.getX = _getx;
    this.getBar = function () { return { x: 'banana', getX: _getx}; };
}

var foo = new Foo ();
alert (foo.getX ());    // 'apple'

var bar = foo.getBar ();
alert (bar.getX ());    // 'banana'
念のため、this でなく普通の変数の場合は関数定義時のスコープで評価されます。いわゆるクロージャです。
function Foo ()
{
    var x = 'apple';
    var _getx = function () { return x; };

    this.getX = _getx;
    this.getBar = function () { var x = 'banana'; return { getX: _getx }; };
}

var foo = new Foo ();
alert (foo.getX ());    // 'apple'

var bar = foo.getBar ();
alert (bar.getX ());    // 'apple'
これと思いっきりごっちゃになってた気がします。

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/2549

コメント

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?