JavaScriptの関数とは
関数とは、複数の処理を1つにまとめたものです。
JavaScriptの関数は、functionキーワードを使用して宣言されるのが基本であり、一度定義した関数は別の箇所から呼び出し実行することができます。JavaScriptの特徴として、定義された関数はfunction型のオブジェクトとして扱われます。
最も一般的な関数の定義方法として、functionキーワードを使用した関数宣言という方法で関数を定義します。
// 引数で名前を受け取り、挨拶テキストを返す関数を定義する
function greet(name) {
const message = `こんにちは、${name}さん。`;
return message;
}
JavaScriptのメソッドとは
メソッドとは、実は関数のうちの一つであり、オブジェクト指向のプログラミング言語で多く利用されます。
メソッドは、簡単に言うとオブジェクト内(クラス内)で定義される関数のことを指します。
const greet = {
name: "taro";
// helloという名のメソッドを定義する
hello: console.log(`こんにちは、${this.name}さん。`);
}
// メソッドを呼び出す
greet.hello(); // => こんにちは、taroさん。
greet["hello"]; // => こんにちは、taroさん。 (同上)
Javaではメソッドはクラス内でしか定義してはいけない決まりですが、JavaScriptではクラスに限らず、オブジェクト内で定義された関数のことをメソッドと呼びます。(JavaScriptではクラスもオブジェクトとして扱います。)
関数とメソッドの違い
関数とメソッドで呼び出し方法が異なる
関数の場合は、関数名の後に丸括弧()を記述することで呼び出すことができます。
一方、メソッドはオブジェクトに紐づいているため、どのオブジェクトのメソッドを呼び出すのかを明示的に記述する必要があります。
// func()関数を定義して、呼び出す。
function func() {
console.log("関数を呼び出しました。");
}
func(); // => 関数を呼び出しました。
// objオブジェクトにmethod()メソッドを定義して、呼び出す。
const obj = {
name: "メソッド",
method: function() { console.log(`${this.name}を呼び出しました。`); }
}
obj.method(); // => メソッドを呼び出しました。
もしメソッドを通常の関数のように記述してしまった場合は、関数が定義されていないというエラーが出てしまうため注意しましょう。
const obj = {
name: "メソッド",
method: function() { console.log(`${this.name}を呼び出しました。`); }
}
method(); // => エラー
メソッドはthisで親オブジェクトを受け取る
メソッドではthisキーワードを使用し親オブジェクトを受け取ることができます。
const obj = {
name: "メソッド",
// thisキーワードを用いて、objオブジェクトのnameプロパティを参照しています。
method: function() { console.log(`${this.name}を呼び出しました。`); }
}
ただし、メソッドを定義する際にアロー関数を使用するとthisの扱いが異なってくるため注意しましょう。
let name = "グローバル変数のname";
const obj = {
name: "メソッド",
// メソッドの定義にアロー関数を使用する。
method: () => { console.log(`${this.name}を呼び出しました。`); }
}
obj.method(); // => グローバル変数のnameを呼び出しました。
アロー関数については、以下の記事で解説しています。
メソッドはすべて関数である
ここまでメソッドと関数について解説してきましたが、結局のところメソッドはすべて関数です。
りんごと果物の関係で例えると、りんご=メソッド、果物=関数であり、りんご(メソッド)は果物(関数)の一部である、ということです。
任意のオブジェクトに紐づいているかどうかの一点を除き、メソッドは基本的に関数と同じようなものであると考えても問題ないです。
まとめ
関数とメソッドは似ているため違いがわかりづらく、悩む人も少なくありません。
JavaScriptのメソッドは、基本的には関数ですが、任意のオブジェクトに紐づいていて以下のような違いがあります。
- 関数とメソッドで呼び出し方法が異なる
- メソッドでthisは親オブジェクトを受け取る
JavaScriptの関数とメソッドは、基本的に同じものであると考えておいて問題ないですが、それぞれの違いについては理解しておきましょう。
コメント