首页 > 代码库 > javascript-面向对象之继承
javascript-面向对象之继承
1.原型链继承(构造函数的原型对象等于另一个构造函数实例化的对象)
function Box(){
this.name=‘lee‘;
}
function Desk(){
this.age=100;
}
Desk.prototype=new Box();//Desk继承了Box,形成了一个原型链;
var desk=new Desk();
alert(desk.name);//lee
function Table(){
this.height=100;
}
Table.prototype=new Desk();// Table 继承了Desk
var table=new Table();//table具有两个继承的属性
//使用原型链继承存在的问题:
//1:当原型中存在引用类型时,存在数据修改的问题
//2:子类类型的对象无法给父类传参数
2.对象冒充
function Test(age){
this.family=["mom","dad"];
this.age=age;
}
function Util(age){
Test.call(this,age);//指明哪个对象来调用Test函数
//this就是我们创建的Util对象
}
//对象冒充的问题 :不能使用原型 所有不能实现数据共享
3.组合继承(原型链与对象冒充)
function Test(age){
this.family=["mom","dad"];
this.age=age;
}
Test.prototype.fun=function(){
return this.age+this.family;
}
function Util(age){
Test.call(this,age); //对象冒充
}
util.prototype=new Text();//这是原型链
var u=new Util(26);
alert(u.age);
4.原型式继承 // o是一个对象
function getObj(o){//返回原型是o的一个对象
function F(){}
F.prototype=o;
return new F();
}
//原型对象
var person={
name:"Tom",
family:{‘mom‘,"dad"}
}
var obj1=getObj(person);
5.寄生 继承(原型式+工厂模式)
function getobj(o){
function F(){};
F.prototype=o;
obj.arr=["html",‘css‘];
return new F();
}
//寄生函数
function createObj(o){
var obj=getobj(o);
return obj;
}
//原型对象
var person={
name:"han",
age:23
}
var a=createObj(person);
javascript-面向对象之继承