继承
来源:互联网 发布:oracle和mysql的优缺点 编辑:程序博客网 时间:2024/05/29 15:22
//----继承:通过原型链实现----------
function Box(){//被继承的函数叫做超类型(其他语言中的父类,派生类)
this.name="lee";
}
function Desk(){//集成的函数叫做子类型(其他语言中叫做子类,派生类)
this.age=100;
}
//通过原型链继承,超类型实例化后的对象实例,赋值给子类的原型属性
Desk.prototype=new Box();
var desk=new Desk();
alert(desk.name);
继承也有之前问题,比如字面量重写原型会中断关系,使
用引用类型的原型,并且子类型还无法给超类型传递参数。
为了解决引用共享和超类型无法传参的问题,我们采用一种叫借用构造函数的技术,或
者成为对象冒充(伪造对象、经典继承)的技术来解决这两种问题。
//----使用对象冒充继承:只能继承构造里的信息,不能继承原型中的
function Box(name,age){
this.name=name;
this.age=age;
this.family=["1","2","3"]
}
Box.prototype.family="4";
function Desk(name,age){
Box.call(this,name,age);//对象冒充
}
var desk=new Desk('gt',100);
alert(desk.name);
alert(desk.family);//1,2,3
构造函数里的方法,放在构造函数里,每次实例化都会分配一个新的地址,浪费,
所以最好放在原型中,保证多次实例化只有一个地址。
var Box=function(name,age){
this.name=name;
this.age=age;
}
Box.prototype.run=function(){
return this.age+this.name+'loading';
}
var Desk=function(name,age){
Box.call(this,name,age);
}
var desk=new Desk('gt',100);
alert(desk.name);
虽然这样写是正确的,但却访问不到原型中的方法
// 借用构造函数虽然解决了刚才两种问题,但没有原型,复用则无从谈起。
// 所以,我们需要原型链+借用构造函数的模式,这种模式成为组合继承
//---组合继承:可继承构造函数中的,也可继承原型中的------
var Box=function(name,age){
this.name=name;
this.age=age;
}
Box.prototype.run=function(){ //共享的方法
return this.age+this.name+'loading';
}
var Desk=function(name,age){
Box.call(this,name,age); //对象冒充:集成构造函数中的
}
Desk.prototype=new Box();//原型链继承:继承原型中的
var desk=new Desk('gt',100);
alert(desk.run());
function Box(){//被继承的函数叫做超类型(其他语言中的父类,派生类)
this.name="lee";
}
function Desk(){//集成的函数叫做子类型(其他语言中叫做子类,派生类)
this.age=100;
}
//通过原型链继承,超类型实例化后的对象实例,赋值给子类的原型属性
Desk.prototype=new Box();
var desk=new Desk();
alert(desk.name);
继承也有之前问题,比如字面量重写原型会中断关系,使
用引用类型的原型,并且子类型还无法给超类型传递参数。
为了解决引用共享和超类型无法传参的问题,我们采用一种叫借用构造函数的技术,或
者成为对象冒充(伪造对象、经典继承)的技术来解决这两种问题。
//----使用对象冒充继承:只能继承构造里的信息,不能继承原型中的
function Box(name,age){
this.name=name;
this.age=age;
this.family=["1","2","3"]
}
Box.prototype.family="4";
function Desk(name,age){
Box.call(this,name,age);//对象冒充
}
var desk=new Desk('gt',100);
alert(desk.name);
alert(desk.family);//1,2,3
构造函数里的方法,放在构造函数里,每次实例化都会分配一个新的地址,浪费,
所以最好放在原型中,保证多次实例化只有一个地址。
var Box=function(name,age){
this.name=name;
this.age=age;
}
Box.prototype.run=function(){
return this.age+this.name+'loading';
}
var Desk=function(name,age){
Box.call(this,name,age);
}
var desk=new Desk('gt',100);
alert(desk.name);
虽然这样写是正确的,但却访问不到原型中的方法
// 借用构造函数虽然解决了刚才两种问题,但没有原型,复用则无从谈起。
// 所以,我们需要原型链+借用构造函数的模式,这种模式成为组合继承
//---组合继承:可继承构造函数中的,也可继承原型中的------
var Box=function(name,age){
this.name=name;
this.age=age;
}
Box.prototype.run=function(){ //共享的方法
return this.age+this.name+'loading';
}
var Desk=function(name,age){
Box.call(this,name,age); //对象冒充:集成构造函数中的
}
Desk.prototype=new Box();//原型链继承:继承原型中的
var desk=new Desk('gt',100);
alert(desk.run());
阅读全文
0 0
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 继承
- 记录一个菜鸟的起飞过程
- spring配置error1 hibernate的事务的配置
- 我的第一篇博客
- nyoj 7 街区最短路径问题(不是图论)
- 生产者消费者实例
- 继承
- jy-大佬作业(5)
- 求1+2+3+……+n的值。
- Qt学习笔记二
- 原型
- 01字典树+贪心(顺便总结字典树模板)
- my original studying notes for readn(),writen(),and readline() function
- 1028.联系人
- nginx代理后如何获取request的真实ip