この解答例は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オブジェクトから削除します。- 結果を返します。