js 继承
1.原型链继承 --> 子类.prototype= new 父类(“参数”)
优点:(继承所有)继承父类 本身 以及 原型对象上的所有 属性 方法。
缺点: 不能给父类 的构造函数传参数 。
function Fu(name){
this.name=name
}
Fu.prototype.say=function(){
console.log("lalala")
}
function Zi(){
}
Zi.prototype=new Fu("123");
var my=new Zi();
console.log(my)
console.log(my.name);
my.say();
2.借用构造函数继承/ 原理:改变this指向 —> 子类构造函数中 { Fu.call(this) }
优点:可以给 父类 的构造函数传参。
缺点: 只能继承 父类 自身的属性方法…原型对象上的不能继承。
function Fu(name){
this.name=name
}
Fu.prototype.say=function(){
console.log("lalala")
}
function Zi(){
Fu.call(this);
}
Zi.prototype=new Fu("123");
var my=new Zi();
console.log(my)
console.log(my.name);
my.say();
3.组合继承== 原型继承(继承所有) + 借用构造函数继承/类式继承/改变this指向继承(可以给构造函数传参)
公式: Zi.prototype=new Fu() + function Zi(){ Fu.call(this,参数) }
function Fu(name,sex){
this.name=name
this.sex=sex
}
Fu.prototype.say=function(s){
console.log(s)
}
function Zi(x,y){
Fu.call(this,x,y)
}
Zi.prototype=new Fu()
var my=new Zi("liang",13)
my.say("会说话")
console.log(my.name,my.sex)
var my1=new Zi("min",18)
my1.say("啦啦啦")
console.log(my1.name,my1.sex)
4.多态 (完美版)
function Fu(name){
this.name=name;
}
Fu.prototype.say=function(){
console.log("--sss--");
}
function Zione(name,h){
Fu.call(this , name)
// 子类自己的属性
this.height=h;
}
Zione.prototype=new Fu();
// 子类自己的方法
Zione.prototype.dance=function(){
console.log("啥都会")
}
var a=new Zione("aa","165cm");
// 访问继承父类的属性 方法
console.log(a.name);
a.say();
// 访问自己的属性 方法
console.log(a.height)
a.dance();
就到这儿 下课! 敬请 期待下节课!!!