js中的prototype和constructor

來源:互聯網
上載者:User

1.js中只有對象,包括對象,函數,常量等。 對象不用解釋。函數也有屬性,常見之一就是prototype。常量也有屬性: (3).__proto__;//Number {}2.函數的prototype 函數是一種特殊的對象,它可以直接通過小括弧來執行自身代碼。 函數還有一個特殊的屬性prototype,它也是一個對象。 prototype對象也有一個特殊的屬性constructor,初始的時候它是指向該函數的。 也就是當js解釋到function關鍵字的時候,會建立兩個對象,一個是function本身,一個是prototype對象。同時將該函數對象的prototype屬性指向prototype,而prototype對象的constructor屬性指向該函數對象。 3.對象的__proto__屬性 每個對象都有一個__proto__屬性(低版本的IE中可能沒有直接給出吧),該屬性十分特殊,因為在調用對象的方法或者訪問對象的屬性時,js會依次遍曆對象本身,該對象的__proto__,該對象的__proto__的__proto__…… 也就是原型鏈繼承的關鍵 4.new關鍵字 new 關鍵字用於通過一個函數建立一個方法。 其實它主要完成三個工作 建立一個對象將該對象的__proto__指向函數的prototype調用該函數(此時注意函數的範圍是第一步建立的對象)最後返回該對象即可。可以以下面的代碼代替 function New(f,args){var a= {};a.__proto__ = f.prototype;f.apply(a,args);return a;} 5.js對象關係圖   其中:xFunction是自訂的函數,xPrototype是xFunction的原型,xObject=new xFunction() Object 是JS內建的Object;_prototype_是Object的原型 Empty是所有函數對象的__proto__,是一個特殊的函數,沒有prototype,  希望大家可以共同探討,給予指點  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.