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继承即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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工具