類與繼承
阿新 • • 發佈:2020-07-29
ES5中:
function People(name,age,number){ this.name = name this.age = age //例項屬性 People.number = number //靜態屬性 } //例項方法 People.prototype.showName = function(){ console.log('我的名字是'+this.name) } //靜態方法 People.getNumber = function(){ return '666' } function Student(name,age,major){ People.call(this,name,age) //繼承屬性 this.major = major } Student.prototype = new People() Student.prototype.constructor = Student //繼承方法
ES6中:
class People{ constructor(name,age){ this.name = name this.age = age this._sex = -1 //引入_sex的原因的為了避免在set中造成死迴圈 } //當獲取屬性的時候涉及到業務邏輯操作,可利用get set(可繼承) get sex(){if(this._sex === 0){ return 'famale' }else if(this._sex === 1){ return 'male' }else{ return new Error('輸入錯誤') } } set sex(value){ if(value === 0 || value === 1){ this._sex = value } } showName(){ console.log('我的名字是'+ this.name) } //靜態方法,可繼承(不能用static定義靜態屬性)static getCount(){ return 'xx' } } const p = new People('zs',18) p.showName() p.sex = 1 console.log(p.sex) console.log(People.getCount()) class Student extends People{ constructor(name,age,major){ super(name,age) this.major = major } } const s = new Student('ls',22,'code') console.log(s.name,s.age,s.major) s.showName() s.sex = 0 console.log(s.sex) console.log(Student.getCount())