1. 程式人生 > >js面向物件與繼承

js面向物件與繼承

     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方法