如果我檢查對象對象的類型,它說「功能」:JavaScript:如果「對象」是一個函數,它如何具有方法?
typeof Object === "function"
但我們都知道,對象有多種方法,如:
Object.create();
Object.freeze();
Object.seal();
Object.getPrototypeOf();
...
(檢查https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)
我的問題:這怎麼可能?一個函數如何能夠有方法?我一直認爲,方法是一個函數,它是對象屬性的值。
在這裏,我們把它作爲一個對象:
Object.freeze();
在這裏,我們把它作爲一個構造函數:
var myObj = new Object();
var myObj2 = Object();
什麼是 「對象」 呢?看起來它既是:功能和對象。
它是一種特殊情況,因爲這些(Object,Array,String,Number)是「本地構造函數」?
好吧,我明白了!感謝您的回答。但爲什麼例如「join」在函數本身和原型樹(Array.join vs Array.prototype.join)中定義? – Teemoh
@souser - 原型上的東西是對象的**實例**的方法。構造函數中的東西是不帶實例的靜態方法。所以,'Array.isArray()'是一個靜態方法,但'Array.prototype.concat()'是一個數組實例的方法。你瞭解靜態方法和實例方法的區別嗎? – jfriend00
更確切地說,如果將事物分配給原型,它不在該類型的「實例」上,但是當JavaScript正在尋找該方法時,它會沿原型鏈上升,直到它找到一個。 這意味着實例本身沒有被定義,除非你明確地做了「onstance.myFunction = sth;」 – svobol13