学习笔记:javascript中的六种继承
2014-11-03 18:16
302 查看
今天学习了javascript中的继承,以下是总结的笔记,有不足或者欠妥的地方希望能和亲爱的你一起谈论:
第一种:原型链式继承方式
function Box(){
this.name="lily";
}
function Desk(myage){
this.age=myage;
}
Desk.prototype=new Box(); //用这种方式写函数,否则每次使用该方法都会开辟空间,浪费内存
var desk=new Desk(20);
alert(desk.name); //结果为:lily
alert(desk.age); //j结果为:20
使用这种方式不能给父类的变量初始化值
第二种:对象冒充方式
function Box(name,age){
this.name=name;
this.age=age;
this.myprint=function(){
return this.name+this.age ;
}
}
function Desk(name,age){
Box.call(this,name,age);
}
var desk=new Desk('lily',20);
var p=desk.myprint();
alert(p); //结果为:lily20
这种方式解决了不能给父类传递参数的问题
第三种:组合方式
function Box(myname)
{
this.name=myname;
}
Box.prototype.myprint=function(){
return '名字:'+this.name ;
}
function Desk(myage)
{
this.age=myage;
Box.call(this,'lily'); //对象冒充
}
Desk.prototype=new Box(); //原型链的方法
var desk = new Desk(20);
var a=desk.myprint();
alert(a); //输出结果为:名字:lily
alert(desk.age); //输出结果为:20
这种方式是JavaScript中最常用的一种方法
第四种:原型式继承
function obj(o){
function F(){}
F.prototype=o;
return new F();
}
var box={
name:'lily'
}
var box1=obj(box);
alert(box1.name); //输出结果为:lily
//这种继承借助原型并基于已有的对象创建新对象,同时还不必此创建自定义类型
第五种:寄生式继承
function obj(o){
function F(){}
F.prototype=o;
return new F();
}
//寄生函数
function create(o)
{
var f=obj(o);
f.fun=function(){
return '请确认:'+this.name+this.age;
}
return f;
}
var p={
name:'lily',
age:20
}
var p1=create(p);
alert(p1.fun()); //输出结果是:请确认:lily20
alert(p1.name); //lily
第六种:寄生式组合继承
function obj(o){
function F(){}
F.prototype=o;
return new F();
}
//寄生函数
function create(box,desk)
{
var f=obj(box);
f.constructor=desk; //调整原型构造指针,避免出错
desk.prototype=f;
}
function Box(myname,myage)
{
this.name=myname;
this.age=myage;
}
function Desk()
{
Box.call(this,'lily',20); //对象冒充
}
create(Box,Desk);
var desk=new Desk();
alert(desk.name); //输出结果为:lily
alert(desk.age); //输出结果为:20
第一种:原型链式继承方式
function Box(){
this.name="lily";
}
function Desk(myage){
this.age=myage;
}
Desk.prototype=new Box(); //用这种方式写函数,否则每次使用该方法都会开辟空间,浪费内存
var desk=new Desk(20);
alert(desk.name); //结果为:lily
alert(desk.age); //j结果为:20
使用这种方式不能给父类的变量初始化值
第二种:对象冒充方式
function Box(name,age){
this.name=name;
this.age=age;
this.myprint=function(){
return this.name+this.age ;
}
}
function Desk(name,age){
Box.call(this,name,age);
}
var desk=new Desk('lily',20);
var p=desk.myprint();
alert(p); //结果为:lily20
这种方式解决了不能给父类传递参数的问题
第三种:组合方式
function Box(myname)
{
this.name=myname;
}
Box.prototype.myprint=function(){
return '名字:'+this.name ;
}
function Desk(myage)
{
this.age=myage;
Box.call(this,'lily'); //对象冒充
}
Desk.prototype=new Box(); //原型链的方法
var desk = new Desk(20);
var a=desk.myprint();
alert(a); //输出结果为:名字:lily
alert(desk.age); //输出结果为:20
这种方式是JavaScript中最常用的一种方法
第四种:原型式继承
function obj(o){
function F(){}
F.prototype=o;
return new F();
}
var box={
name:'lily'
}
var box1=obj(box);
alert(box1.name); //输出结果为:lily
//这种继承借助原型并基于已有的对象创建新对象,同时还不必此创建自定义类型
第五种:寄生式继承
function obj(o){
function F(){}
F.prototype=o;
return new F();
}
//寄生函数
function create(o)
{
var f=obj(o);
f.fun=function(){
return '请确认:'+this.name+this.age;
}
return f;
}
var p={
name:'lily',
age:20
}
var p1=create(p);
alert(p1.fun()); //输出结果是:请确认:lily20
alert(p1.name); //lily
第六种:寄生式组合继承
function obj(o){
function F(){}
F.prototype=o;
return new F();
}
//寄生函数
function create(box,desk)
{
var f=obj(box);
f.constructor=desk; //调整原型构造指针,避免出错
desk.prototype=f;
}
function Box(myname,myage)
{
this.name=myname;
this.age=myage;
}
function Desk()
{
Box.call(this,'lily',20); //对象冒充
}
create(Box,Desk);
var desk=new Desk();
alert(desk.name); //输出结果为:lily
alert(desk.age); //输出结果为:20
相关文章推荐
- JavaScript中的继承学习笔记(1):Crockford uber方法中的陷阱
- javascript面向对象学习笔记(一)——继承
- html5学习笔记---05.JavaScript 中的面向对象,继承和封装
- JavaScript 学习笔记八 继承与引用
- JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承
- JavaScript 的原型继承与类式继承学习笔记
- Javascript 设计模式学习笔记(2) - 继承(Inheritance) (下)
- JavaScript学习笔记-原型继承
- JavaScript学习笔记——继承
- 《JavaScript 语言精粹》 学习笔记 —— 第五章 继承
- javascript 学习笔记(5)---继承
- Javascript 设计模式学习笔记(2) - 继承(Inheritance) (上)
- javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
- html5学习笔记---05.JavaScript 中的面向对象,继承和封装
- javascript学习笔记(二)--继承
- javascript设计模式学习笔记之“类式继承”
- 【Javascript学习笔记】由JavaScript中call()方法引发的对面向对象继承机制call的思考
- javascript面向对象学习笔记(一)——继承
- javascript 学习笔记之面向对象编程(二):继承&多态
- JavaScript学习笔记(三十二) 经典继承模式二-借用构造方法