メソッド抽出の落とし穴と部分適用
call/apply/bindでメソッド抽出の問題を解決し、bindとラッパーアローによる小さな部分適用のパターンを学びます。
「メソッド抽出の落とし穴と部分適用」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全3レッスンが含まれています。
全体像
目標: メソッドを取り出した後も this を安定させ、引数をあらかじめ設定します。
- call(thisArg, a, b)
- apply(thisArg, [a, b])
- bind(thisArg, a) → 新しい関数を返します
- bind または小さなアロー関数による部分適用

取り出した関数の落とし穴
obj.method() として呼び出せば動作しますが、関数を取り出すとオブジェクトを失い、this が機能しなくなります。
// Extraction loses this
const user = {
name: "Ayla",
label: function (prefix) {
return prefix + ":" + this.name;
}
};
console.log("method call:", user.label("Hi")); // "Hi:Ayla"
// Extract
const f = user.label;
console.log("extracted:", f("Hi")); // this is missing -> "Hi:undefined" (in strict mode this is undefined)

call/apply の一度限りの使用
call と apply を使うと、1回の呼び出しに限って this を設定できます。
// Fix by passing this explicitly using call/apply
console.log("call :", f.call(user, "Hi")); // "Hi:Ayla"
console.log("apply:", f.apply(user, ["Yo"])); // "Yo:Ayla"

再利用のための bind
bind は this を記憶する関数を作成します。再度 bind せずに何度も呼び出せます。
// bind returns a new function with this fixed
const bound = f.bind(user);
console.log("bound once:", bound("Hey")); // "Hey:Ayla"
console.log("bound again:", bound("Yo")); // "Yo:Ayla"

部分適用(シンプル)
bind を使って先頭の引数をあらかじめ設定するか、小さな アロー関数のラッパーを使って値と this を固定します。
// Partial application: pre-fill arguments
function add(a, b, c) { return a + b + c; }
// Using bind: pre-fill a=10
const add10 = add.bind(null, 10);
console.log("add10(1,2):", add10(1, 2)); // 13
// Using an arrow wrapper: pre-fill prefix
const labelHi = function (obj) {
return function () { return obj.label("Hi"); };
}(user);
console.log("arrow partial:", labelHi()); // "Hi:Ayla"

実践的なパターン
ヒント:
- 取り出したメソッドには、1回だけ bind を使って再利用します。
- 一度限りの呼び出しには call/apply を使います。
- 引数をあらかじめ設定する場合は、bind または小さなアロー関数のラッパーを使います。
- ヘルパーは小さくし、名前を明確にしてください。

bind と call/apply の比較クイズ
簡単な確認: this を維持し、引数をあらかじめ設定します。

まとめ
まとめ: 関数を取り出すと this を失います。1回限りの呼び出しには call/apply を使い、this を固定して再利用するには bind を使います。部分適用には、bind または小さなアロー関数で値をあらかじめ設定します。

よくある質問
「メソッド抽出の落とし穴と部分適用」レッスンは無料ですか?
はい。「メソッド抽出の落とし穴と部分適用」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全3レッスンが含まれています。
「メソッド抽出の落とし穴と部分適用」で何を学びますか?
call/apply/bindでメソッド抽出の問題を解決し、bindとラッパーアローによる小さな部分適用のパターンを学びます。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
JavaScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「メソッド抽出の落とし穴と部分適用」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJavaScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- レキシカルなthisと動的なthis、アロー関数再入門
- メソッド抽出の落とし穴と部分適用
- 関数型の代替案 — コンテキスト、クロージャ、ヘルパー