JavaScriptでメソッドを借りる方法とは?call()・apply()・bind()の使い方を解説
JavaScriptでは、call()、apply()、bind() の3つのメソッドを使うことで、他のオブジェクトが持つメソッドを「借りて」実行することができます。このテクニックは「メソッドの借用(Method Borrowing)」と呼ばれ、コードの再利用性を高めるために広く活用されています。
call()・apply()・bind() の違い
- call():第1引数に this として渡したいオブジェクトを指定し、残りの引数はカンマ区切りで個別に渡します。呼び出し時に即座に実行されます。
- apply():call() とほぼ同じですが、引数を配列(または配列風オブジェクト)としてまとめて渡す点が異なります。
- bind():this を固定した新しい関数を返します。即座には実行されず、必要なタイミングで後から呼び出せます。
メソッドを借用するサンプルコード
以下は、オブジェクト obj が持つ welcome メソッドを、メソッドを持たない別のオブジェクト obj1 が借用して実行する例です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
body {
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
.result,.sample {
font-size: 18px;
font-weight: 500;
color: rebeccapurple;
}
.result {
color: red;
}
</style>
</head>
<body>
<h1>JavaScriptでメソッドを借りる</h1>
<div class="sample"></div>
<div class="result"></div>
<button class="Btn">CLICK HERE</button>
<h3>
上のボタンをクリックすると、オブジェクトobjのwelcomeメソッドを借用します
</h3>
<script>
let sampleEle = document.querySelector(".sample");
let resultEle = document.querySelector(".result");
let obj = {
firstName: "Rohan",
lastName: "Sharma",
welcome() {
return "Welcome " + this.firstName + " " + this.lastName;
},
};
let obj1 = {
firstName: "John",
lastName: "Shaw",
};
sampleEle.innerHTML = "obj.welcome() = " + obj.welcome();
document.querySelector(".Btn").addEventListener("click", () => {
resultEle.innerHTML = "obj1.welcome() = " + obj.welcome.call(obj1);
});
</script>
</body>
</html>ポイントは obj.welcome.call(obj1) の部分です。call() の第1引数に obj1 を渡すことで、welcome メソッド内の this が obj1 を指すようになり、obj1 の firstName と lastName を使った結果が返されます。
実行結果
上記のコードを実行すると、次のような画面が表示されます。

「CLICK HERE」ボタンをクリックすると、借用したメソッドの実行結果が表示されます。

-
JavaScriptでプロトタイプを使ってメソッドを共有する方法
JavaScriptにおけるメソッドの共有JavaScriptでは、メソッドをオブジェクト(コンストラクタ関数)のprototypeプロパティに定義することで、複数のインスタンス間でそのメソッドを共有できます。通常、コンストラクタ内でthis.displayInfo = function(){...}のようにメソッドを定義すると、生成されるインスタンスごとに関数のコピーが作成され、メモリを無駄に消費します。一方、prototypeに定義すれば、関数は一度だけ生成され、すべてのインスタンスから参照・呼び出しできるようになります。これはメモリ効率の面でも大きなメリットがあります。以下は、JavaS
-
JavaScriptでクラスに静的メソッドを割り当てる方法
JavaScriptでクラスに静的メソッド(staticメソッド)を割り当てるには、メソッドの前にstaticキーワードを付けるだけです。静的メソッドは、クラスをインスタンス化することなく、クラス名から直接呼び出すことができます。 静的メソッドはクラスそのものに属するため、個々のインスタンスの状態に依存しないユーティリティ関数や計算処理などに適しています。なお、静的メソッドはインスタンスからは呼び出せず、必ずクラス名を介して呼び出す必要がある点に注意しましょう。 以下は、JavaScriptでクラスに静的メソッドを割り当てるコード例です。 コード例 <!DOCTYPE html>