1

thisこのコンテキストでキーワードがどのように機能するかを理解しようとしています。

function Person(name) {
    this.name = name;
    this.sayName = function() {
        alert('My name is ' + this.name);
    };
}


var p = new Person('Smith');
p.sayName();  // 'My name is Smith'

var q = p;

q.sayName();  // 'My name is Smith'

q = p.sayName;

q();  // 'My name is'   ???

最後の例で「Smith」が取り上げられていないのはなぜですか?

q が単に関数を指しているためですか (つまり、メソッドが属するオブジェクトはこのコンテキストでは認識されません)。q はグローバル空間にあるのでthis、関数内でグローバルですか (つまり、sayName() の呼び出し元はグローバル空間またはウィンドウですか)?

4

2 に答える 2

1

@Paulproが言ったことに便乗して、クラス内にPerson()追加することでコンテキストへの参照を作成できます。var that = this;そうすればthat.name、関数内から呼び出すことができます。

function Person(name) 
{
    var that = this;

    this.name = name;
    this.sayName = function() 
    {
        alert('My name is ' + that.name);
    };
}


var p = new Person('Smith');
p.sayName();  // 'My name is Smith'

var q = p;

q.sayName();  // 'My name is Smith'

q = p.sayName;

q();  // 'My name is Smith'


jsFiddle のデモを見る

于 2013-06-12T20:06:10.230 に答える