2

私はこれを読んでいます - http://learn.jquery.com/javascript-101/this-keyword/しかし、よくわからない例があります。

// A function being attached to an object at runtime.
var myName = "the global object";
var sayHello = function() {
    console.log( "Hi! My name is " + this.myName );
};
var myObject = {
    myName: "Rebecca"
};
var secondObject = {
    myName: "Colin"
};

myObject.sayHello = sayHello;
secondObject.sayHello = sayHello;

sayHello();              // "Hi! My name is the global object"
myObject.sayHello();     // "Hi! My name is Rebecca"
secondObject.sayHello(); // "Hi! My name is Colin"

次の 2 行を除いて、すべて理解しています。

myObject.sayHello = sayHello;
secondObject.sayHello = sayHello;

私たちは彼らと何をしますか?オブジェクトへの新しいキーを作成し、それらの値が関数 sayHello になることを示しますが、関数を明示的に呼び出さないように括弧を省略します? そして、なぜそれらが必要なのですか?それらを省略した場合、同じ結果になり、「実行時に関数がオブジェクトにアタッチされる」ことになりませんか?

4

3 に答える 3

3

オブジェクトへの新しいキーを作成し、それらの値が関数 sayHello になることを宣言します。

はい

関数を明示的に呼び出さないために、括弧を省略しますか?

はい。関数を呼び出した場合は、関数自体ではなく、関数呼び出しの戻り値を割り当てます。

それらを省略しても、同じ結果が得られませんか

これらの 2 行を省略すると、 が呼び出され、 を呼び出そmyObject.sayHelloundefinedとするとエラーが発生しますundefined()

于 2013-03-29T07:33:36.873 に答える
1
var sayHello = function() {
    ...
};
myObject.sayHello = sayHello;

以下と同じです:

var myObject = {
    myName: "Rebecca",
    sayHello: function() {
        ...
    }
};
于 2013-03-29T07:42:05.227 に答える
1

何が起こっているかというmyObject.sayHelloと、sayHello関数を指しているということです (かっこを省略します。そうしないと、呼び出された関数の結果が代入されます)。sayHello関数を呼び出すたびに、 が呼び出さthisれるオブジェクトになりますsayHello

したがってmyObject.sayHello、 はthisになりますmyObject

単純に を呼び出すsayHello場合、実際に行うのは を呼び出すことなwindow.sayHelloので、thisに設定されwindowます。

于 2013-03-29T07:46:06.640 に答える