prototype:原型:若是對象B是創建在對象A的基礎上,那麼A爲B的原型,相似Java裏面的父類和子類的關係,B不只能夠使用A定義的屬性和方法,還能夠進行額外的功能擴展,常常應用在js框架裏面。java
定義基礎對象:框架
function People(name){ //對象屬性 this.name=name; //對象方法:相似java中的public方法(只能由對象實例調用) this.show=function(){ console.log(name+"is a common person......"); }; } //對象方法:相似java中的靜態方法,只能由類自己調用 People.run = function(){ console.log("People can run................."); } //定義對象的原型方法,相似非靜態方法 People.prototype.showSelf = function(){ //原型方法 console.log("I am a optimistic people......."); } //對象實例化測試 var people=new People("Squirrel"); People.run(); //調用類方法 people.show(); people.showSelf();
效果:測試
實現:繼承的原理經過原型實現,每一個Javascript對象都具有prototype屬性。ui
測試代碼this
<script> var baseClass = function(){ //父類 this.name="baseClass:name--->baseClass"; this.showMsg = function(){ console.log("baseClass::showMsg"); } } var extendClass = function(){ //子類 this.age = "extendClass:age--->20"; this.showMsg = function(){ console.log("extendClass::showMsg"); }; } extendClass.prototype = new baseClass(); var instance = new extendClass(); instance.showMsg(); //相似方法被重寫 console.log(instance.name) console.log(instance.age) </script>
分析:prototype
baseClass類爲extendClass類的原型,extendClass能夠使用全部的原型的方法,實現功能和屬性擴展(相似java裏面的繼承)若是方法名一致,js引擎掃描從自身掃描開始,若是掃描到則不進行向下掃描(原型鏈工做原理)3d