2 回答

TA貢獻(xiàn)1847條經(jīng)驗 獲得超7個贊
javascript中,“函數(shù)”(方法)也是對象。
一切對象都有一個根源。它是Object.prototype。
根源之上再沒有其他根源。Object.getPrototypeOf(Object.prototype)是null。js中除字面量以外的一切引用對象都來自這個“根源”對象。
表達(dá)式Object.getPrototypeOf(Function) === Function.prototype的結(jié)果是真。這是Function特有的。實際上Function的prototype是一個內(nèi)置函數(shù),一切函數(shù)都派生自這個內(nèi)置函數(shù),這個內(nèi)置函數(shù)是一個函數(shù)工廠。這個內(nèi)置函數(shù)對象的prototype指向“根源”對象。
表達(dá)式Object.prototype === Object.getPrototypeOf(Function.prototype)的結(jié)果是真。說明了Object跟Function二者之間的聯(lián)系,是通過“根源”對象聯(lián)系起來的。
Function和Object,既是函數(shù),因為都可以Function()或者Object()這樣的方式執(zhí)行,又是對象,因為可以Function.a = 'a',Object.a = 'a'這樣賦值。
說它們是函數(shù),是因為他們都是通過上面第4條中說的”內(nèi)置函數(shù)工廠“,派生出來的,因而具備函數(shù)的特性。
說他們是對象。是因為他們都是通過上面第1條中的”根源“對象,派生出來的,因此具備對象的特征。
繼續(xù)說一下,F(xiàn)unction.prototype指向”內(nèi)置函數(shù)“。而Object.prototype指向”根源對象“。
因而new Function會產(chǎn)生一個匿名函數(shù),而new Object產(chǎn)生一個plain object。
他們之間的關(guān)系簡單描述就像下面這樣。

TA貢獻(xiàn)1844條經(jīng)驗 獲得超8個贊
一、從定義的角度來說:
function Function(){}
前者為定義一個js函數(shù)
后者為這個函數(shù)的名稱
Object為選擇的DOM對象
二、從用法講:
var a = new Object(function(){});
這里a也是function了。
三、總結(jié):
不管是function ,還是new Function(), 還是new Object(function(){}),當(dāng)解釋器(例如V8)遇到時,則將它們初始化成一個函數(shù)(最主要的是給其添加了一個[[call]]屬性)。
- 2 回答
- 0 關(guān)注
- 1133 瀏覽
添加回答
舉報