🐡
JavaScript / 関数は「実行可能なオブジェクト」
データ型についておさらい
プリミティブ型 | オブジェクト型 |
---|---|
string | object |
number | array |
bigint | function |
boolean | |
undefined | |
null | |
symbol |
なぜfunctionがオブジェクト型にカテゴライズされているのか?
そもそもオブジェクト型とは
プリミティブ型以外のものをオブジェクト型(非プリミティブ型)というらしいが、厳密にいえばプロパティと値をペアで持つことができるものと定義される
注) 以降は
オブジェクト型(データ型)
object(オブジェクト型に分類されるプロパティとメソッドを持つデータ構造)
と使い分ける
objectの場合
const person = {
name: "Alice",
age: 25
}
console.log(person.name)
// > Alice
arrayの場合
const fruits = ["apple", "banana", "orange"]
console.log(fruits[1])
// > banana
// この場合indexがプロパティと考える
実は関数(function)もプロパティとメソッドを持つことができる
function person() { }
person.firstname = "john";
person.greeting = function () {
return "hello";
};
console.log(person.firstname);
// > john
console.log(person.greeting());
// > hello
まとめ
プロパティと値をペアで持つことができるものがオブジェクトであるならば、関数もオブジェクトである。これにより、動的にプロパティやメソッドを登録することができる。
こういった細かい使用をどれほど知っているかで、JavaScriptへの理解はかなり変わってくると思う。
Discussion