三段代碼簡單驗證javascript中Object和Function的關係

來源:互聯網
上載者:User
  今天重溫經典書籍。這一次看的是部落格園李戰老師寫的<<悟透JavaScript>>,也是被樓豬翻看最多的技術書籍之一。話說在樓豬理解和實踐能力尚欠火候的時候,在這篇裡曾經照搬了李戰老師不少東西寫在自己的部落格裡作為“知識儲備”。這一次還是不能免俗。在翻到第5章的時候,被開篇第二段話深深吸引和折服:“函數具有對象的全部特徵,你完全可以把函數當對象調用。其實,函數就是對象,只不過比一般的對象多了一個括弧“{}”操作符,這個操作符用來執行函數的邏輯,即函數本身還可以被調用,一般對象卻不可以被調用,除此之外完全相同”。寥寥數語,卻深刻闡釋了對象和函數的關係。下面樓豬就通過自己寫的幾段簡單代碼,論證一下javascript內建Object和Function的關係。
  
1、Function就是Object,Object就是Function   alert(Function instanceof Object); // true
   alert(Object instanceof Function); // true

 如你所看到的那樣,通過instanceof操作符,函數就是對象,對象就是函數。

2、既然1是成立的,那麼Function擴充的原型方法,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

你沒有看錯,我們為Function擴充的原型方法funcMethod,Object實現了神奇的“不勞而獲”。

3、既然1和2都成立,那麼Object擴充的原型方法,Function能“得到”嗎?!

代碼

        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?

上面代碼中最後有個問號的那一行是彈出true還是false呢?賣個關子,根據樓豬通篇直白而單純的表述,你應該已經知道結果了,這裡不公布答案了。
  最後,容樓豬在這裡得意地自戀一下:個人認為上面這三段代碼應該比原書中驗證“函數就是對象的本質”的代碼更具有說服力。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.