JavaScript的继承

1.借用构造函数继承 call,apply(继承实例属性)

复制代码
function Parent(sName,nAge){
    this.sName = sName;
    this.nAge = nAge;
}

function Child(sName,nAge,sSex){
    //Parent.call(this,sName,nAge);
    Parent.apply(this,[sName,nAge]);
    this.sSex = sSex;
}
复制代码

2.原型继承

利用空函数做中介(YUI做法)

复制代码
//ES3
function fExtend(Child,Parent){
    var F = function(){};
    F.prototype = Parent.prototype;
    Child.prototype = new F();
    Child.prototype.constructor = Child;
}   
//ES5
Object.create(new Parent(),{props}) //简单,多new了一个parent对象
//避免new对象
function Child(){
    Parent.call(this);//实例继承
}
Child.prototype = Object.create(Parent.prototype);//object create只进行原型继承
复制代码

3.拷贝继承

深拷贝继承(jquery做法)

复制代码
function fDeepCopy(dest,src){
    var dest = dest || {},
        toString = Object.prototype.toString;
    for(var p in src){
        if(toString.call(p) === '[object Object]'){
            dest[p] = {};
            fDeepCopy(p,dest[p]);
        }
        else if(toString.call(p) === '[object Array]'){
            dest[p] = [];
            fDeepCopy(p,dest[p]);
        }
        else{
            dest[p] = src[p];
        }
    }
}

fDeepCopy(Child,Parent);//实例属性拷贝
fDeepCopy(Child.prototype,Parent.prototype);//原型属性拷贝
复制代码

4. class继承(ES6)

复制代码
class Animal {
    constructor(){
        this.type = 'animal';
    }
    says(text){
        console.log(this.type + ' says ' + say)
    }
}

class Cat extends Animal{
    constructor(){
        super();
        this.type = 'cat';
    }
}

const cat = new Cat();
cat.says('hello');//cat says hello
复制代码

 总结:一般完整的继承要由借用继承和原型继承来组合完成,借用继承负责实例属性,包括引用类型的属性,原型继承一般负责原型上的方法继承,原型属性为引用类型的话,会被共用。ES6的话,直接用class继承即可。

posted @   全玉  阅读(180)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示