javascript関数が呼び出す様々な方法
2673 ワード
JavaScriptでは、次の4つの呼び出し方法があります.(1)基本関数呼び出し(2)メソッド呼び出し(3)コンストラクタコール(4)はコール()とappy()で呼び出します.基本関数呼び出し 一般関数呼び出しモード、例えば:
JavaScript code[?]
print Value()関数が実行されるとき、this.value値は2であり、つまり、thisは対象のobjectではなくグローバルオブジェクトを指す.
(3)戻り値:関数の戻り値が呼び出された式の値となります.I.関数の戻りがインタプリタで終端に到達した場合、つまりreturn XXXに実行されていない文です.戻り値はundefinedです.II.関数がリターンした場合、レセプタがreturn xxx文に実行したため、return以降の値を返します.III.return文の後に値がない場合、すなわちreturnはundefinedに戻ります.メソッド呼び出し 関数がオブジェクトの属性として保存されている場合、方法と呼びます.(1)パラメータと戻り値の処理は、関数呼び出しと一致します.(2)コンテキストthisを呼び出します.
printを呼び出すと、thisはグローバルオブジェクトにバインドされ、グローバル変数value値1を印刷します.しかし、Object.m()を呼び出した場合、thisはメソッドmが属するオブジェクトObjectをバインドしているため、印刷の値はObject.valueであり、すなわち2である.コンストラクタ呼び出し 関数または方法が呼び出される前にキーワードnewが付いています.構造関数呼び出しを構成します.例えば:
下の二行のコードは等価です.
I.初めてfn()関数を呼び出したのはコンストラクターとして呼び出されたので、コンテキストthisを呼び出して新しく作成されたオブジェクトobjにバインドされます.したがって、グローバル変数value値は変わりません.Objに属性valueが追加され、値は2です.II.2回目の呼出fn()関数は、通常の関数として呼び出されたもので、上下はthisでグローバルオブジェクトに紐付けされ、ブラウザではwindowとなります.したがって、グローバルオブジェクトのvalue値は3に変更され、Objの属性値は変わらない.
(3)コンストラクタは、通常、returnキーを使用せずに、新しいオブジェクトに戻ります.また、アーキテクチャー関数が表示されたままにreturn文を使ってオブジェクトを返すと、表式の値を呼び出すのはこのオブジェクトです.コンストラクタがreturn文を使用しているが、戻り値が指定されていない場合や元の値に戻る場合は、戻り値を無視して、新しいオブジェクトを呼び出しの結果として使用します.
4.コール()とアプリ()で呼び出します.
独立した関数の呼び出しでは、strictモードかどうかによって、thisはundefinedまたはwindowを指しますが、thisの指向をコントロールできます.関数のthisがどのオブジェクトを指すかを指定するには、関数自体のapply()またはcall()の方法で2つのパラメータを受信します.
call()メソッドは、独自のパラメータリストを関数として使用しています.
applyメソッドの最初のパラメータは変更されたコールオブジェクトで、2番目のパラメータは関数パラメータを配列形式で[]に入力しますが、call()の最初のパラメータはcall()の方法と同じです.2番目のパラメータは元のパラメータシーケンスです.
function fn(o){
……
}
fn({x:1});
基本関数呼び出しでは、(1)各パラメータが、宣言関数に実際に渡すときに定義されるイメージとして定義されます.(2)thisはグローバル変数に結合されています.JavaScript code[?]
var object = {value:1};
var value = 2;
object.printProps = function(){
var printValue = function(){
console.log(this.value);
};
printValue();
console.log(this.value);
}
object.printProps();
この時の運転結果は、2 1print Value()関数が実行されるとき、this.value値は2であり、つまり、thisは対象のobjectではなくグローバルオブジェクトを指す.
(3)戻り値:関数の戻り値が呼び出された式の値となります.I.関数の戻りがインタプリタで終端に到達した場合、つまりreturn XXXに実行されていない文です.戻り値はundefinedです.II.関数がリターンした場合、レセプタがreturn xxx文に実行したため、return以降の値を返します.III.return文の後に値がない場合、すなわちreturnはundefinedに戻ります.
function print(){
console.log(this.value);
}
var value=1;
var object = {value:2};
object.m = print;
//
print();
//
object.m();
運転結果は:1 2printを呼び出すと、thisはグローバルオブジェクトにバインドされ、グローバル変数value値1を印刷します.しかし、Object.m()を呼び出した場合、thisはメソッドmが属するオブジェクトObjectをバインドしているため、印刷の値はObject.valueであり、すなわち2である.
function fn(){……}
var obj = new fn();
(1)パラメータ処理:一般的な場合のコンストラクタパラメータ処理と関数コールモードは一致しています.しかし、コンストラクタが使用されていない場合、JavaScript構文は、参加リストと括弧を省略することができます.下の二行のコードは等価です.
var obj = new Object();
var obj = new Object;
(2)関数の呼び出しコンテキストは、新規作成されたオブジェクトです.function fn(value){
this.value =value;
}
var value =1;
var obj = new fn(2);
console.log(value);
console.log(obj.value);
fn(3);
console.log(value);
console.log(obj.value);
運転結果:1 2 3 2I.初めてfn()関数を呼び出したのはコンストラクターとして呼び出されたので、コンテキストthisを呼び出して新しく作成されたオブジェクトobjにバインドされます.したがって、グローバル変数value値は変わりません.Objに属性valueが追加され、値は2です.II.2回目の呼出fn()関数は、通常の関数として呼び出されたもので、上下はthisでグローバルオブジェクトに紐付けされ、ブラウザではwindowとなります.したがって、グローバルオブジェクトのvalue値は3に変更され、Objの属性値は変わらない.
(3)コンストラクタは、通常、returnキーを使用せずに、新しいオブジェクトに戻ります.また、アーキテクチャー関数が表示されたままにreturn文を使ってオブジェクトを返すと、表式の値を呼び出すのはこのオブジェクトです.コンストラクタがreturn文を使用しているが、戻り値が指定されていない場合や元の値に戻る場合は、戻り値を無視して、新しいオブジェクトを呼び出しの結果として使用します.
4.コール()とアプリ()で呼び出します.
独立した関数の呼び出しでは、strictモードかどうかによって、thisはundefinedまたはwindowを指しますが、thisの指向をコントロールできます.関数のthisがどのオブジェクトを指すかを指定するには、関数自体のapply()またはcall()の方法で2つのパラメータを受信します.
call()メソッドは、独自のパラメータリストを関数として使用しています.
applyメソッドの最初のパラメータは変更されたコールオブジェクトで、2番目のパラメータは関数パラメータを配列形式で[]に入力しますが、call()の最初のパラメータはcall()の方法と同じです.2番目のパラメータは元のパラメータシーケンスです.