私はこのコードを持っています:
function boo() {
this.is_global = "Yes!";
}
を実行するとboo();、is_globalオブジェクトwindowがあります。つまり、is_globalグローバルコンテキストに入ります。
私is_globalはboo機能しているだけだと思っていました。
これは正常な動作ですか?
私はこのコードを持っています:
function boo() {
this.is_global = "Yes!";
}
を実行するとboo();、is_globalオブジェクトwindowがあります。つまり、is_globalグローバルコンテキストに入ります。
私is_globalはboo機能しているだけだと思っていました。
これは正常な動作ですか?
はい、これは正常な動作です。関数がグローバルに定義されている場合、thisは正義windowであり、追加されるものwindowはすべてグローバルです。
thisウィンドウを指します。関数を参照する場合は、次を使用します。
arguments.callee.is_global = "Yes!";
今:
window.is_global; //undefined
boo.is_global; //"Yes!"
別の方法は、プロパティを追加するときにbooを独自の名前で参照することです。
function boo() {
boo.is_global = "Yes!";
}
booこれにより、元の関数オブジェクトが変更されることに注意してください。代わりにコンストラクターとして使用した結果のすべてのインスタンスを変更する場合はboo、ここで他の回答を参照してください。
「呼び出される関数」にthisなるには、(を使用して)オブジェクトコンストラクターとして関数を呼び出す必要がありますnew。
var foo = new boo();
これにより、プロパティを持つのインスタンスが作成されます。これにより、コンストラクター関数自体にプロパティが作成されることはありません。デモをご覧ください。boois_global
を使用しない場合new(またはなどのメソッドapply)は、this「関数が呼び出されるオブジェクト」です。この場合、オブジェクトがないため、デフォルトのオブジェクトが使用されます。Webブラウザーのコンテキストでは、デフォルトのオブジェクトはwindowです。それで:
var foo = boo();
と同じです
var foo = window.boo();
と中thisです。windowboo
ローカル変数を宣言したかったので、varステートメントを使用します。