問題は、私が数回試みただけでなく、兄の記事のいくつかを読んだので、理解するために言われている、今まで私はまだいくつかの詳細が所定の位置に対処されていないアウトを手書きしますが、私はこの記事を書いた後、私は本当に私は自分自身を愛するコール関数を手書きできるようになることを誓う
call関数の役割
1. コール関数のthis
2. 関数は、渡されたオブジェクトを使って呼び出され、実行後すぐに結果が返される。
eg getInfo._call(person, 1, 1); //personこれはgetInfoのthis
注意点がある:
1. コール関数のthis
2. コールを呼び出す必要があるため、手書きの_call必要であれば、関数プロトタイプの下に取り付ける。
3. 他人が渡したパラメータは捨てられない。
実装のアイデアとコード
1. 渡されたオブジェクトを取得するcontext
2. コールする関数を取得し、渡されたコンテキストにマウントする。
3. パラメータを渡し、マウントされた関数を実行し、結果を得る。
4. このオブジェクトにマウントされている関数を削除する
5. 結果を返す。over v_v
//この手書きの呼び出し関数を呼び出したいのであれば、関数プロトタイプに実装しなければならない。
Function.prototype._call = function(){
// 1. 渡されたオブジェクトを取得するcontext
var context = arguments[0] || window;
// 2. コールする関数を取得し、渡されたコンテキストにマウントする。
context.fn = this; //thisこれは_call
// 3. パラメータを渡し、マウントされた関数を実行し、結果を得る。
var args = [];
for(var i = 1 ; i < arguments.length; i++){
args.push(arguments[i]);
}
var result = context.fn(...args);
// 4.このオブジェクトにマウントされている関数を削除する
delete context.fn;
// 5. 関数の実行結果を返す
return result;
}
//テストは以下の通りである。
var person = {
name: 'jakeQuc',
age: 18
}
function getInfo(a, b) {
var sum = a + b;
console.log('name:', this.name, 'age:', this.age, 'sum:', sum);
}
getInfo._call(person, 1, 1) //name: jakeQuc age: 18 sum: 2




