2 回答

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

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