Es5 對(duì)象和原型鏈實(shí)現(xiàn)混合繼承
方法的區(qū)別
在構(gòu)造函數(shù)和原型鏈添加方法區(qū)別:
Object.prototype.test=function(){
alert('我是原型鏈上 test()');
}
function Person(){
this.name='張三';
this.age=20;
function test(){
alert('我是Person上 test()')
}
}
function Son(){
}
var p=new Son()
p.test();
// 打印的是原型鏈上 test()
結(jié)論: 原型鏈上的方法會(huì)被多個(gè)實(shí)例 共享,構(gòu)造函數(shù)不會(huì)
靜態(tài)方法:
function static(){
}
static.add=function(){
alert('靜態(tài)方法')
}
E5的繼承
原理: 原型鏈+對(duì)象冒充的組合繼承模式
對(duì)象冒充實(shí)現(xiàn)繼承
function Father(){
}
function Son(){
}function Father(){
this.name='張三';
this.age=20;
this.test =function(){
alert('我是Father')
}
}
function Son(){
Father.call(this); // 通過(guò)改變 this 指向 對(duì)象冒充繼承
}
var w=new Son();
w.test();
總結(jié): 對(duì)象冒充可以繼承構(gòu)造的數(shù)里面的屬性和方法 但是無(wú)法繼承原型鏈上的屬性和方法
原型鏈實(shí)現(xiàn)繼承
function Father(name,age){
this.name='張三';
this.age=20;
this.test =function(){
alert('我是Father')
}
}
function Son(){
Father.call(this); // 通過(guò)改變 this 指向 對(duì)象冒充繼承
}
Father.prototype.wx=function(){
alert('原型鏈上的方法')
}
Father.prototype.sex='男'
Son.prototype=new Father()
var w=new Son();
w.wx();
**總結(jié)** 原型鏈實(shí)現(xiàn)繼承:可以繼示構(gòu)造數(shù)里面的屬性和方法也可以繼承原型鏈上面的屬性和方法 但是實(shí)例化子類時(shí)沒(méi)辦法給父類傳參
優(yōu)化
function Father(name, age) {
this.name = name;
this.age = age;
this.test = function () {
alert(`我叫${name} 今年${age}`)
}
}
function Son(name,age) {
Father.call(this, name, age); // 通過(guò)改變 this 指向 對(duì)象冒充繼承
}
Father.prototype.wx = function () {
alert('原型鏈上的方法')
}
Father.prototype.sex = '男'
Son.prototype = new Father()
var w = new Son('李白',20);
w.test()