例項物件和函式物件本質區別:
例項物件:通過 new 函式產生的物件稱為例項物件,簡稱物件。
函式物件:將函式作為物件使用時,簡稱為函式對。
下面舉例說明:
function Fn() { } const fn = new Fn() console.log(fn); console.log(Fn.prototype) console.log(Fn.bind())
結果:
分析程式碼:
首先定義一個函式,即 Fn 是一個函式。接著 new Fn(),說明 Fn 是一個建構函式。
關於建構函式請參考https://blog.csdn.net/m_ssy/article/details/82894813
此時 fn 是 Fn 的例項物件,簡稱物件。因此第一條列印語句輸出的就是一個物件。
接著 Fn.prototype,每建立一個函式,該函式都會自動帶有一個prototype屬性。按語法格式來看這裡的 Fn 應該是一個物件,但是它又是一個函式,這個時候我們就把 Fn 稱為函式物件。
這裡涉及到 prototype 相關知識 以及函式和物件之間的關係,請參考 https://blog.csdn.net/flyingpig2016/article/details/53048394、https://www.cnblogs.com/liyusmile/p/8820443.html
緊接著 Fn.bind(),表示在呼叫函式物件的 bind 方法,注意只有函式物件才有bind方法,一般的物件沒有這個方法。說明 bind 方法在 Fn 的原型上。請參考 https://blog.csdn.net/qq_42019025/article/details/80708446
此外函式物件的方法還有 call() 方法和 apply() 方法,詳細介紹請參考 https://blog.csdn.net/qq2071114140/article/details/100024421