在 JavaScript 中,**函式就是物件**,也是一等公民。綁定事件時傳入的函式,本質上是一個Function 物件實例。
length、name)與方法(call、apply、bind)。new Function() 或函式字面量建立的每個函式,都是獨立的物件實例,擁有各自的閉包環境與 this 綁定。var handler = function() { console.log('clicked'); };
element.addEventListener('click', handler);
// handler 是一個 Function 物件實例
// 移除時必須傳入同一個引用:element.removeEventListener('click', handler);
JS 使用原型繼承,而非類別導向。Object、Array、Number 等內建建構函式本身也是函式物件。new Object() 是呼叫建構函式的 建構器調用模式,產生的物件透過原型鏈繼承方法,並非像 C++/Java 那樣從類別實例化。
在 JS 語境下,使用「函式物件」或「回調函式」比「實例」更精確,避免混淆類別導向概念。