コードの例:
let person = {
name: 'emma',
sayhi(){
console.log(this.name)
}
}
person.sayhi()
証する
- コールコールの使い方は、次のコードのように、1つのthisと1つ以上の引数で関数を呼び出すことです:
let person = {
name: 'emma',
sayhi(){
console.log(this.name)
}
}
person.sayhi.call({name:'jack'})
呼び出しメソッドの最初のパラメータは thisを指定する必要があることがわかりますが、関数やメソッドが戻り値を持たない場合、最初のパラメータはundefinedまたはnullになります。
function f1(a,b){
return a+b
}
f1.call(undefined,1,2)
- apply 使い方 callの使い方と似ていますが、2番目のパラメーターは配列として渡す必要があります。
function f1(a,b){
return a+b
}
f1.apply(undefined,[1,2])
- バインド使用バインドも thisを定式化することができますが、関数の使用後に直接呼び出すと適用されるとは異なり、バインドバインド thisは、関数を返しますコードの例
this.x = 3
let f1={
x: 1,
value(){
return this.x
}
}
let result = f1.value
console.log(result())
let result2 = result.bind(f1)
console.log(result2())
applyとcallは thisを変更した直後に実行されるのに対し、bindはコンテキストを変更する関数を返すことに注意してください。
function test(a,b,c,d) {
var arg = Array.prototype.slice.call(arguments,1);
console.log(arg);
}
test("a","b","c","d"); //b,c,d
Array.prototype.slice.call()また、擬似配列オブジェクトを配列に変換することができ、擬似配列は長さ属性を持っており、要素に0、1、2...添え字を介してアクセスすることができますが、配列のプッシュ、ポップ、およびその他のメソッドはありません。実際の配列に変換するには、call、applyを使用することができます、あなたは方法の配列に変換するメソッドの配列を使用することができます。
var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);
// ES2015
const args = Array.from(arguments);
const args = [...arguments];
結果を見てわかるように、resultはグローバル・スコープからxを呼び出しているので3を返しますが、result2はbindを使ってthisをf1にバインドしているので、f1からxを呼び出しているので1となります。




