各関数には、長さとプロトタイプの2つのプロパティが含まれています
長さ:現在の関数が受け入れたい指名されたパラメーターの数
プロトタイプ:すべての強さを維持する本当の方法です
コードコピーは次のとおりです。
function saysname(name){
アラート(名前);
}
関数合計(num1、num2){
num1 + num2を返します。
}
関数sayshi(){
アラート( "hi");
}
アラート(sayname.length); // 1パラメーターの数
アラート(sum.length); // 2パラメーターの数:2
アラート(sayhi.length); // 0パラメーターなし
各関数には、2つの非相続メソッドが含まれています:apply()とcall()
どちらの方法も特定の範囲で関数を呼び出します。これは、実際には関数本文にこのオブジェクトの値を設定することに等しくなります
最初にApply()2つのパラメーターを受け入れます。1つは機能の実行の範囲で、もう1つはパラメーターの配列です(配列インスタンスまたは引数オブジェクトにすることができます)
コードコピーは次のとおりです。
関数合計(num1、num2){
num1 + num2を返します。
}
関数callum1(num1、num2){
return sum.apply(this、arguments); //引数オブジェクトに渡されます
}
関数callum2(num1、num2){
return sum.apply(this、[num1、num2]);
}
アラート(Callum1(10、10)); // 20
アラート(callum2(10、20)); // 30
第二に、コールメソッドの最初のパラメーターは変更されていません。変更は、他のパラメーターがパラメーターに渡され、関数に渡されたパラメーターを1つずつリストする必要があることです。
コードコピーは次のとおりです。
関数合計(num1、num2){
num1 + num2を返します。
}
関数callum(num1、num2){
return sum.call(this、num1、num2);
}
アラート(Callum(10、200));
どの方法がより便利であるかについては、それはあなたの願いに完全に依存します。パラメーターがない場合、それはどちらかを使用するのと同じです。
ただし、適用方法と通話方法の外観は、ハルパラメーターを削除する方法だけではありません。
それらの実際の使用は、拡張機能が依存する範囲にあります。
コードコピーは次のとおりです。
window.color = "red";
var o = {color: "blue"};
関数sayscolor(){
アラート(this.color);
}
saycolor(); // red
saycolor.call(this); // red
saycolor.call(window); // red
saycolor.call(o); //青
Apply and Callを使用してスコープを拡張することの最大の利点は、メソッドと結合関係が必要ではないことです。
ECMAScript5は、方法を定義します:bind()。このメソッドは、値がバインド関数に渡される値にバインドされる関数のインスタンスを作成します
コードコピーは次のとおりです。
window.color = "red";
var o = {color: "blue"};
関数sayscolor(){
アラート(this.color);
}
var bindfun = saycolor.bind(o);
bindfun(); // blue
上記はすべてこの記事についてです。あなたがそれを好きになることを願っています。