この解答例はChatGPTによって生成されています,正しいかは自己判断で。
BFE.devでのAI解答例 - JavaScript コーディング問題
61. `Function.prototype.call`を実装する
function myCall(fn, thisArg, ...args) {
// fnが関数かどうかを確認する
if (typeof fn !== "function") {
throw new TypeError("not a function");
}
// thisArgがundefinedまたはnullの場合、グローバルオブジェクトをthisに設定する
thisArg = thisArg || globalThis;
// thisArgにfnを加えたプロパティを作成する
const key = Symbol();
thisArg[key] = fn;
// 関数を実行して、戻り値を保存する
const result = thisArg[key](...args);
// thisArgからfnを削除する
delete thisArg[key];
// 戻り値を返す
return result;
}
解説:
- 引数として与えられたfnが関数であるかどうかを確認します。もしそうでなければ、
TypeError
をスローします。 - thisArg引数をチェックします。
undefined
またはnull
の場合、グローバルオブジェクトをthis
に設定します。 Symbol()
を使ってthisArgオブジェクトにfnを設定します。- レストパラメータ(...args)を使って、残りの引数をfnに渡します。
- 関数を実行し、結果をresultに保存します。
delete
演算子を使って、fnをthisArgオブジェクトから削除します。- 結果を返します。