私の質問は:
function Foo()
{
this.foo = "bar"; // <- What is "this" here?
}
私が言えることから、それはどのようFoo
に使用されるか、つまりコンストラクターまたは関数として使用されるかによって異なります。this
さまざまな状況で何が起こる可能性がありますか?
私の質問は:
function Foo()
{
this.foo = "bar"; // <- What is "this" here?
}
私が言えることから、それはどのようFoo
に使用されるか、つまりコンストラクターまたは関数として使用されるかによって異なります。this
さまざまな状況で何が起こる可能性がありますか?
this
キーワードは、関数が属するオブジェクト、または関数がオブジェクトwindow
に属していない場合はオブジェクトを参照します。
これは、OOPコードで使用され、関数が属するクラス/オブジェクトを参照します。次に例を示します。
function foo() {
this.value = 'Hello, world';
this.bar = function() {
alert(this.value);
}
}
var inst = new foo();
inst.bar();
このアラート:Hello, world
または関数this
を使用して、どのオブジェクトが参照するかを操作できます。(時々非常に便利な機能)apply()
call()
var bar1 = new function() {
this.value = '#1';
}
var bar2 = new function() {
this.value = '#2';
}
function foo() {
alert(this.value);
}
foo.call(bar1); // Output: #1
foo.apply(bar2, []); // Output: #2
ダグラス・クロックフォードがこの問題について何と言っているかを読んで、JavaScriptプログラミング言語の調査から彼を引用してください。
関数はオブジェクトです。他のオブジェクトと同じようにメンバーを含めることができます。これにより、関数に独自のデータテーブルを含めることができます。また、オブジェクトがコンストラクターと関連するメソッドのセットを含むクラスとして機能することもできます。
関数はオブジェクトのメンバーになることができます。関数がオブジェクトのメンバーである場合、それはメソッドと呼ばれます。オブジェクトのメソッドが呼び出されたときにオブジェクトに設定される、これと呼ばれる特別な変数があります。
たとえば、式foo.bar()では、this変数は関数バーの一種の追加引数としてオブジェクトfooに設定されます。次に、機能バーはこれを参照して、対象のオブジェクトにアクセスできます。
do.re.mi.fa()のようなより深い式では、この変数はオブジェクトdoではなくオブジェクトdo.re.miに設定されます。単純な関数呼び出しでは、これはグローバルオブジェクト(別名ウィンドウ)に設定されますが、これはあまり役に立ちません。正しい動作は、特に内部関数を呼び出すときに、これの現在の値を保持することでした。
また、「this」は、関数の呼び出し方法、 apply関数の読み取り、関数の呼び出しによって変わる可能性があります。
ここからリンクされている彼の(無料の)プレゼンテーションで、JavaScriptの最大の頭脳の1つから学ぶことに時間を費やすことをお勧めします。
JavaScriptでは、慣例(これは単なる慣例です)では、大文字で始まる関数はすべてコンストラクターとして使用されます。次に、
var foo = new Foo()
this
によって参照されようとしている新しく作成されたオブジェクトを参照しますfoo
。
もちろん、Foo()
自分で呼び出すことを妨げるものは何もありません。その場合this
、関数が呼び出されたオブジェクトを参照します。混乱を避けるため、これはお勧めしません。
JavaScriptでは、すべてがオブジェクトであり、関数です。this.foo
次のコードで言うとき
function Foo()
{
this.foo = "bar"; // <- What is "this" here?
}
foo
Foo
オブジェクトのメンバー変数になります