call、apply、bindメソッド
11316 ワード
Function.prototype.call( )
現在、ターゲットの使用方法について説明します.
メソッドはこの値に適用されません.
-->同様のアレイでアレイメソッドを使用する場合は、変換による書き込みよりも
callを使用して他の方法を借りる必要がある場合は、callを使用します.
call()メソッドは、与えられたthis値と渡されたパラメータを使用して関数を呼び出します.
call()は買収リストを受け入れます.
以下のコードを作成してcall()を勉強します.
function Person(name, gender) {
this.name = name;
this.gender = gender;
}
function Child(name, gender, age, favorite) {
// 생성자 연결에 call( )을 사용
// Person 객체의 생성자는 name, gender를 매개변수로 정의한다.
// Child는 this, name, gender를 전달하는 Person을 호출하고 있다.
// Person은 name과 gender 속성을 초기화하고, Child 함수에서는 age, favoriteChoco를 정의한다.
Person.call(this, name, gender);
this.age = age;
this.favoriteChoco = 'mint chocolate';
}
let child1 = new Child('benny', 'female', 7);
console.log(`이름: ${child1.name}, 나이: ${child1.gender}, 가장 맛있는 초콜릿: ${child1.favoriteChoco}`);
call()メソッドではnull、undefinedグローバルオブジェクトに置き換えられます.
元の値がオブジェクトに変換されます.
call()は、割り当てられた異なるオブジェクトを呼び出す関数/メソッドのオブジェクトを再割り当てするために使用されます.
ここのthisは、現在のオブジェクト(呼び出されたオブジェクト)を参照します.
call()を使用して新しいオブジェクトを作成して使用する場合は、新しいオブジェクトを作成することなく、call()を使用して他のオブジェクトに継承できます.
Function.prototype.apply( )
基本的にはcallに似ていますが、callのように借りる方法よりも、
配列要素を簡単に入れるためによく使われます.
展開展開展開展開時(パーマメーター値取得時のrestパラメータ)
Math.max(1, 20, 30, 4);
let arr = [1, 20, 30, 4]; // 쉽지 않음
Math.max(null, arr);
// 배열이 들어가면 안 되는 함수에 배열을 묶어 넣어줄 때 사용
Math.max(...arr) // spreadSyntax 전개구문을 사용하면 편리하다
apply()メソッドは、関数を指定されたこの値、配列(または類似の配列オブジェクト)に提供されるパラメータとして呼び出します.apply()は買収の単一手配を受け入れる.
次のコードを作成してapply()を勉強します.
const numArr = [34, 2, 65, 38, 97, 5, 8, 1];
const maxNum = Math.max.apply(null, numArr);
console.log(maxNum); // 97
const minNum = Math.min.apply(null, numArr);
console.log(minNum); // 1
apply()を使用すると、既存の関数を呼び出すときに別のthisオブジェクトを割り当てることができます.
ここで、thisは現在のオブジェクト、呼び出されたオブジェクトを参照します.
apply()は、新しいオブジェクトごとにメソッドを再作成する必要はありません.
1回作成するだけで他のオブジェクトに継承できます.
Function.prototype.bind( )
bind()法は関数に利用できる方法である.
これを変更して新しい関数を作成します.固定したい時に使います.
bind()メソッドを呼び出すと、新しい関数が作成されます.
最初のパラメータとして受信された値としてvalueはキーワードを与え、次のパラメータはバインド関数のパラメータに提供されます.
bind()を学ぶために次のコードを書きます.
function add(num1, num2) {
return this + num1 + num2;
}
let add7 = add.bind(20, 30, 40);
console.log(add);
console.log(add7);
console.log(add7(25, 14));
Reference
この問題について(call、apply、bindメソッド), 我々は、より多くの情報をここで見つけました https://velog.io/@jy777hi/day6-prototype-classテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol