8

私はjavascriptを学んでいますが、疑問に思いました。最初の例では「this」の値が定義されていないのに、2 番目の例では正しく出力されるのはなぜですか。

例 1:

var myNamespace = {
    myObject: {
        sayHello: function() {
            console.log( "name is " + this.myName );
        },
        myName: "john"
    }
};

var hello = myNamespace.myObject.sayHello;

hello(); // "name is undefined"

例 2:

var myNamespace = {
    myObject: {
        sayHello: function() {
            console.log( "Hi! My name is " + this.myName );
        },
        myName: "Rebecca"
    }
};

var obj = myNamespace.myObject;

obj.sayHello();//"Hi! My name is Rebecca"

「this」の値が関数内で変化するのはなぜですか。欠けている概念は何ですか?

4

2 に答える 2

1

最初のケースでは、暗黙的thisなオブジェクトはグローバル スコープです。myNameグローバル スコープには no がないため、undefined になります。

適切な のフリー関数が必要な場合は、次thisを使用しますbind

var hello = myNamespace.myObject.sayHello.bind(myNamespace.myObject);
于 2013-10-09T16:20:55.037 に答える