es5中的類

es5里的類(自己寫)

function Person(){
  this.name = '張三';
  this.age = 20;
}
var p = new Person();
p.name //張三

構(gòu)造函數(shù)和原型鏈里增加方法

function Person(){
  this.name = '張三'; //屬性
  this.age = 20;
  this.run = function(){ //實例方法
    console.log('xxx')
  }
}
//通過原型鏈擴展屬性
Person.prototype.sex = '女'
//通過原型鏈擴展實例方法
Person.prototype.work = function(){
  return '程序員'
}
var p = new Person();
p.work(); //程序員
//原型鏈上的屬性會被多個實例共享,構(gòu)造函數(shù)不會

實例方法必須通過newPerson才能調(diào)用

//定義靜態(tài)方法
Person.getInfo = fucntion(){
  console.log('我是靜態(tài)方法')
}
//調(diào)用
Person.getInfo();

es5中的繼承

定義一個web類,繼承Person類
兩種方式1.原型鏈 2.對象冒充 3.組合

對象冒充
function Web(){
  Person.call(this) //對象冒充實現(xiàn)繼承
//Web繼承了Person
}
var w = new Web();
w.run(); //xxx
w.work(); //報錯
//對象冒充可以繼承構(gòu)造函數(shù)里的方法,但是沒法繼承原型鏈上的屬性和方法
原型鏈實現(xiàn)繼承
Web.prototype = new Person(); //原型鏈實現(xiàn)繼承
var w = new Web();
w.work(); //程序員
w.run(); //xxx
//原型鏈繼承:既可以繼承構(gòu)造函數(shù)中的屬性和方法,也可以繼承原型鏈上的屬性和方法
原型鏈實現(xiàn)繼承的問題:

實例化子類的時候沒法給父類傳參

function Person(name,age){
  this.name = name; //屬性
  this.age = age;
  this.run = function(){ //實例方法
    console.log(name+'在運動')
  }
}
Person.prototype.work = function(){
  console.log(this.name+'是程序員')
}
var p = new Person('李四',20);
p.run(); //李四在運動

//web繼承person
function Web(name,age){
}
Web.prototype = new Person();
var w = new Web('張三',20)
w.run(); //undefined在運動
原型鏈+構(gòu)造函數(shù)的組合繼承模式
function Web(name,age){
  Person.call(this,name,age) //可以繼承構(gòu)造函數(shù)里的子類和方法
}
Web.prototype = new Person();
var w = new Web('張三',20)
w.run(); //張三在運動
w.work(); //張三是程序員

換種寫法:

Web.prototype = Person.prototype
var w = new Web('張三',20)
w.run(); //張三在運動
w.work(); //張三是程序員
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容