驗(yàn)證javascript中Object和Function的關(guān)系的三段簡單代碼
更新時(shí)間:2010年06月27日 02:35:29 作者:
今天重溫經(jīng)典書籍。這一次看的是博客園李戰(zhàn)老師寫的<<悟透JavaScript>>,也是被樓豬翻看最多的技術(shù)書籍之一。
話說在樓豬理解和實(shí)踐能力尚欠火候的時(shí)候,在這篇里曾經(jīng)照搬了李戰(zhàn)老師不少東西寫在自己的博客里作為“知識(shí)儲(chǔ)備”。這一次還是不能免俗。在翻到第5章的時(shí)候,被開篇第二段話深深吸引和折服:“函數(shù)具有對(duì)象的全部特征,你完全可以把函數(shù)當(dāng)對(duì)象調(diào)用。其實(shí),函數(shù)就是對(duì)象,只不過比一般的對(duì)象多了一個(gè)括號(hào)“{}”操作符,這個(gè)操作符用來執(zhí)行函數(shù)的邏輯,即函數(shù)本身還可以被調(diào)用,一般對(duì)象卻不可以被調(diào)用,除此之外完全相同”。寥寥數(shù)語,卻深刻闡釋了對(duì)象和函數(shù)的關(guān)系。下面樓豬就通過自己寫的幾段簡單代碼,論證一下javascript內(nèi)置Object和Function的關(guān)系。
1、Function就是Object,Object就是Function
alert(Function instanceof Object); // true
alert(Object instanceof Function); // true
如你所看到的那樣,通過instanceof操作符,函數(shù)就是對(duì)象,對(duì)象就是函數(shù)。
2、既然1是成立的,那么Function擴(kuò)展的原型方法,Object能“得到”嗎?
alert(Object.funcMethod); // undefined
Function.prototype.funcMethod = function() {
/*some function method code here*/
}
alert(Function.funcMethod);
alert(Object.funcMethod);
alert(Function.funcMethod === Object.funcMethod); //true
你沒有看錯(cuò),我們?yōu)镕unction擴(kuò)展的原型方法funcMethod,Object實(shí)現(xiàn)了神奇的“不勞而獲”。
3、既然1和2都成立,那么Object擴(kuò)展的原型方法,F(xiàn)unction能“得到”嗎?!
代碼
alert(Function.objMethod); // undefined
Object.prototype.objMethod = function() {
/*some object method code here*/
}
alert(Object.objMethod);
alert(Function.objMethod);
alert(Function.objMethod === Object.objMethod); //true or false?
上面代碼中最后有個(gè)問號(hào)的那一行是彈出true還是false呢?賣個(gè)關(guān)子,根據(jù)樓豬通篇直白而單純的表述,你應(yīng)該已經(jīng)知道結(jié)果了,這里不公布答案了。
最后,容樓豬在這里得意地自戀一下:個(gè)人認(rèn)為上面這三段代碼應(yīng)該比原書中驗(yàn)證“函數(shù)就是對(duì)象的本質(zhì)”的代碼更具有說服力。
1、Function就是Object,Object就是Function
復(fù)制代碼 代碼如下:
alert(Function instanceof Object); // true
alert(Object instanceof Function); // true
如你所看到的那樣,通過instanceof操作符,函數(shù)就是對(duì)象,對(duì)象就是函數(shù)。
2、既然1是成立的,那么Function擴(kuò)展的原型方法,Object能“得到”嗎?
復(fù)制代碼 代碼如下:
alert(Object.funcMethod); // undefined
Function.prototype.funcMethod = function() {
/*some function method code here*/
}
alert(Function.funcMethod);
alert(Object.funcMethod);
alert(Function.funcMethod === Object.funcMethod); //true
你沒有看錯(cuò),我們?yōu)镕unction擴(kuò)展的原型方法funcMethod,Object實(shí)現(xiàn)了神奇的“不勞而獲”。
3、既然1和2都成立,那么Object擴(kuò)展的原型方法,F(xiàn)unction能“得到”嗎?!
代碼
復(fù)制代碼 代碼如下:
alert(Function.objMethod); // undefined
Object.prototype.objMethod = function() {
/*some object method code here*/
}
alert(Object.objMethod);
alert(Function.objMethod);
alert(Function.objMethod === Object.objMethod); //true or false?
上面代碼中最后有個(gè)問號(hào)的那一行是彈出true還是false呢?賣個(gè)關(guān)子,根據(jù)樓豬通篇直白而單純的表述,你應(yīng)該已經(jīng)知道結(jié)果了,這里不公布答案了。
最后,容樓豬在這里得意地自戀一下:個(gè)人認(rèn)為上面這三段代碼應(yīng)該比原書中驗(yàn)證“函數(shù)就是對(duì)象的本質(zhì)”的代碼更具有說服力。
相關(guān)文章
淺析js中的every()對(duì)空數(shù)組總返回true
JavaScript?語言的核心部分足夠大,以至于我們很容易誤解其某些部分的工作方式,本文就來和大家一起討論下為什么JS中的?every()對(duì)空數(shù)組總返回?true,需要的可以參考下2023-09-09基于layui table返回的值的多級(jí)嵌套的解決方法
今天小編就為大家分享一篇基于layui table返回的值的多級(jí)嵌套的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09javascript實(shí)現(xiàn)密碼驗(yàn)證
這篇文章主要介紹了javascript密碼驗(yàn)證的實(shí)現(xiàn)方法,過程很簡單具有一定的參考價(jià)值,適合初學(xué)者學(xué)習(xí)研究,感興趣的小伙伴們可以參考一下2015-11-11JavaScript 上傳文件(psd,壓縮包等),圖片,視頻的實(shí)現(xiàn)方法
本文通過實(shí)例代碼給大家介紹了JavaScript 上傳文件(psd,壓縮包等),圖片,視頻功能,需要的朋友可以參考下2017-06-06動(dòng)態(tài)加載JavaScript文件的3種方式
第一種是使用document.write/writeln()方式,第二種使用jQuery,第三種是使用原生js方法,感興趣的小伙伴們可以參考一下2018-05-05JS實(shí)現(xiàn)側(cè)邊欄鼠標(biāo)經(jīng)過彈出框+緩沖效果
本文主要介紹了JS實(shí)現(xiàn)側(cè)邊欄鼠標(biāo)經(jīng)過彈出框+緩沖效果的實(shí)現(xiàn)原理與方法步驟。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-03-03layUI的驗(yàn)證碼功能及校驗(yàn)實(shí)例
今天小編就為大家分享一篇layUI的驗(yàn)證碼功能及校驗(yàn)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10