继承的理解
什么是继承:子类可以引用父类的所有方法和属性但是父类不能引用子类的属性和方法--这种单向引用叫做继承--继承是从上往下单向进行的,每个下级都可以引用上级的属性,并且可以自定义自己特有的属性或者改变上级的属性(这种改变不是通用的)
继承的意义
怎么实现继承:核心就是1)让子类的原型对象的原型属性(__proto__) 指向 父类的原型对象 2)在子类内部运行父类改变this指向,从而将父类的属性和方法写入子类
这样就实现了:1)每个子类的实例都能拥有“独立”的父类属性和方法,不会相互干扰--子类继承了父类的属性和方法
2)父类的原型改变时(增删新的方法或属性),子类也可以获得改变的状态---子类继承了父类原型的属性和方法(这种改变时
所有后代同步改变的)
3)子类的可以在Child.prototype上添加只属于子类的属性和方法,而不会影响父类-也就是说实现了子类可以引用父类的所有方法和属性
但是父类不能引用子类的属性和方法,单向的传递即继承!
具体流程如下:
function Parent(){ this.a = 'a'; } function Child(){ //在子类内部运行父类,改变this指向,使子类继承父类的属性和方法 Parent.call(this); this.b = 'b'; } //将子类原型对象的原型属性指向父类的原型对象,从而使子类继承父类原型中的属性和方法 Child.prototype.__proto__ = Parent.prototype; child = new Child(); parent = new Parent(); Parent.prototype.getName = function(){ return 'Hello World'; } console.log(child.a,child.b) Child.prototype.getAge = function(){ return 18; } console.log(child.getAge()); //18 console.log(parent.getAge); //undefined--父类不可以访问子类原型
ps:上面的
Child.prototype.__proto__ = Parent.prototype;
经常被写成
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
为啥要这么麻烦的写,比较疑惑
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix