js面向物件與繼承
阿新 • • 發佈:2018-11-14
function Person(name,sex){ // var this=new Object();//這裡註釋的程式碼 假想 new操作時系統內部幫我們做了這些 this.name=name; this.sex=sex; //不建議方法寫在建構函式裡 this.showSex=function(){ console.log(this.sex); } // return this;} //建議面向物件物件的方法寫在原型裡,這樣new出來的物件的所擁有的方法都是指向原型裡的方法 Person.prototype.showName=function(){ console.log(this.name); } var p1=new Person('leo','MR'); p1.showName(); p1.showSex(); var p2=new Person('jack','MR'); p2.showName(); p2.showSex(); console.log(p1.showName==p2.showName);//true console.log(p1.showSex==p2.showSex); //false 每次new出來的物件都有自已的showSex方法 這樣浪費資源 //繼承 function Worker(name,sex,job){ Person.call(this,name,sex);//實現屬性的繼承 this.job=job; } //實現方法的繼承 for(var i in Person.prototype){ Worker.prototype[i]=Person.prototype[i]; } //不建議以下寫法,這樣寫會導致子類影響父類 因為prototype是引用型別 給Worker.prototype加showJob方法的同時,也會給Person.prototype加上; //Worker.prototype=Person.prototype; Worker.prototype.showJob=function() { console.log(this.job); } var w1=new Worker('penny','MS','programmer'); w1.showJob(); var p3=new Person('susan','MR'); p3.showJob();//子類不會影響父類,子類沒有showJob方法