各関数には、長さとプロトタイプという 2 つのプロパティが含まれています
長さ: 現在の関数が受け入れることを希望する名前付きパラメータの数
プロトタイプ: それは彼らのすべての強さのメソッドを保存する本当の場所です
関数sayName(名前) {
アラート(名前);
}
関数 sum(num1, num2) {
return num1 num2;
}
関数sayHi() {
alert("こんにちは");
}
alert(sayName.length);//1 パラメータの数は 1 つです
alert(sum.length);//2 パラメータの数: 2
alert(sayHi.length);//0 パラメーターなし
各関数には、apply() と call() という 2 つの非継承メソッドが含まれています
これら 2 つのメソッドは、特定のスコープ内の関数を呼び出します。これは、実際には関数本体
でこのオブジェクトの値を設定するのと同じです。
まず、apply() は 2 つのパラメーターを受け入れます。1 つは関数が実行されるスコープで、もう 1 つはパラメーター配列 (配列インスタンスまたは引数オブジェクトにすることができます)
関数 sum(num1, num2) {
return num1 num2;
}
関数 callSum1(num1, num2) {
return sum.apply(this, argument);//引数オブジェクトを渡します
}
関数 callSum2(num1, num2) {
return sum.apply(this, [num1, num2]);
}
alert(callSum1(10, 10));//20
alert(callSum2(10, 20));//30
次に、call メソッドの最初のパラメーターは変更されていません。変更された点は、残りのパラメーターはすべて、関数に渡されるパラメーターを 1 つずつリストする必要があることです。
関数 sum(num1, num2) {
return num1 num2;
}
function callSum(num1, num2) {
return sum.call(this, num1, num2);
}
アラート(callSum(10, 200));
どちらの方法がより便利であるかは、すべてあなたの希望次第です。パラメータがない場合はどちらを使用しても同じになります。
ただし、apply メソッドと call メソッドは、ハル パラメータを取得するためだけのものではありません。
彼らの武道の本当の使い方は、機能の拡張にあります。
window.color = "red";
var o = {color: "blue"};
関数sayColor() {
アラート(this.color);
}
sayColor();//red
sayColor.call(this);//red
sayColor.call(window);//red
sayColor.call(o);//blue
apply と call を使用してスコープを拡張する最大の利点は、メソッドとの結合関係が必要ないことです。
ECMAScript5 では、bind() メソッドも定義されています。このメソッドは、この値がバインド関数
に渡される値にバインドされる関数のインスタンスを作成します。
window.color = "赤";
var o = {color: "blue"};
関数sayColor() {
アラート(this.color);
}
varbindFun =sayColor.bind(o);
bindingFun();//blue
以上がこの記事の全内容です。気に入っていただければ幸いです。