继承(构造函数+原型对象模拟实现继承)
继承
我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承。
call()
调用这个函数, 并且修改函数运行时的this 指向
fun.call(thisArg, arg1, arg2, ...);call把父类的this指向子类
thisArg :当前调用函数this 的指向对象
arg1,arg2:传递的其他参数
利用构造函数实现子类的继承:
属性的继承
function Father (uname,age) { // this指向父类的实例对象 this.uname = uname; this.age = age; // 只要把父类的this指向子类的this既可 } function Son (uname, age,score) { // this指向子类构造函数 // this.uname = uname; // this.age = age; // Father(uname,age); Father.call(this,uname,age); this.score = score; } Son.prototype.sing = function () { console.log(this.uname + '唱歌') } var obj = new Son('刘德华',22,99); console.log(obj.uname); console.log(obj.score); obj.sing();
方法的继承:
实现方法把父类的实例对象保存给子类的原型对象
一般情况下,对象的方法都在构造函数的原型对象中设置,通过构造函数无法继承父类方法。核心原理:
①将子类所共享的方法提取出来,让子类的prototype 原型对象= new 父类()
②本质:子类原型对象等于是实例化父类,因为父类实例化之后另外开辟空间,就不会影响原来父类原型对象
③将子类的constructor指向原构造函数
把父类的实例对象赋值给子类的原型
function Father () { } Father.prototype.chang = function () { console.log('唱歌'); } function Son () { } // Son.prototype = Father.prototype; Son.prototype = new Father(); var obj = new Son(); obj.chang(); Son.prototype.score = function () { console.log('考试'); } // obj.score(); // console.log(Son.prototype); console.log(Father.prototype);
注意:一定要让Son指回构造函数
实现继承后,让Son指回原构造函数
实现继承后,让Son指回原构造函数 Son.prototype = new Father(); Son.prototype.constructor = Son;
总结:用构造函数实线属性继承,用原型对象实线方法继承
前端菜鸟一枚,如有错误之处,烦请指出,与大家共同进步!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)