4
var name = "the Window.";
var object = {
    name:"Object",
    getName: function(){
        return this.name;
    }
}
(object.getName)(); //"Object"
(object.getName = object.getName)(); //"the Window"

このコードを実行すると、「ウィンドウ」が返されますが、「オブジェクト」である必要があると思います。理由を教えてください。ありがとう。

4

4 に答える 4

3
var name = "the Window.";

グローバル宣言は、グローバル/ウィンドウ オブジェクトのプロパティを作成します。これは (多かれ少なかれ) 以下と同等です。

var global = this;
global.name = 'the Window';

表現:

(object.getName = object.getName)

によって参照される関数を返しますobject.getName。次の空のパラメーター リスト (つまり()) により、それが呼び出されます。

この値は呼び出しによって設定されないため、デフォルトで global/window オブジェクトになり、関数は global.name の値を返します

于 2013-04-19T04:53:36.627 に答える
0

this慣れ親しんだ古典的な OOP の方法で考える代わりにthis、関数が呼び出されるコンテキストとして考えてください。

サンプル コードでは、その関数が宣言されている場所に関係なくwindow、呼び出しのコンテキストです。getName

于 2013-04-19T05:09:54.303 に答える
0
var x = object.getName;
x();

まったく同じではありません。「=」は、x が object.getName と同じメモリ アドレスを参照していることを確認するだけですが、x は window に属し、object.getName は object に属します。問題は代入式の戻り値にあると思います。(object.getName = object.getName) の値を受け取る一時変数がある可能性があります。つまり、

var temp = (object.getName = object.getName);
temp();//"the Window"

したがって、意味があるかもしれません。

于 2014-01-31T16:41:20.007 に答える