分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

聊一聊JS的继承

发布时间:2023-09-06 01:41责任编辑:彭小芳关键词:暂无标签

1、组合继承

//组合继承function Animal(){this.name=name||‘Animal‘;this.sleep=function(){console.log(this.name+‘sleep‘);}}Animal.prototype.eat=function(food){console.log(this.name+‘eat‘+food);}function Cat(name){Animal.call(this);//继承实例属性/方法,也可以继承原型属性/方法this.name=name||‘tom‘;//调用了两次父类构造函数,生成了两份实例(子类实例将子类原型上的那份屏蔽了)}Cat.prototype=new Animal();Cat.prototype.constructor=Cat;//组合继承也是需要修复构造函数指向的。var cat = new Cat();//既是子类的实例,也是父类的实例console.log(Cat.prototype.constructor);console.log(cat.name)console.log(cat.eat(‘haha‘))//可传参

  

特点:

 可以继承实例属性/方法,也可以继承原型属性/方法

  1. 既是子类的实例,也是父类的实例
  2. 不存在引用属性共享问题
  3. 可传参
  4. 函数可复用

缺点:

  1. 调用了两次父类构造函数,生成了两份实例(子类实例将子类原型上的那份屏蔽了)

推荐指数:★★★★(仅仅多消耗了一点内存)

2、寄生组合继承

寄生组合继承function Animal(){this.name=name||‘Animal‘;this.sleep=function(){console.log(this.name+‘sleep‘);}}Animal.prototype.eat=function(food){console.log(this.name+‘eat‘+food);}function Cat(name){Animal.call(this);this.name=name||‘tom‘;}(function(){var Super=function(){};// 创建一个没有实例方法的类Super.prototype=Animal.prototype;Cat.prototype=new Super(); //将实例作为子类的原型})()Cat.prototype.constructor = Cat;var cat=new Cat();console.log(cat.eat(‘haha‘))

  

特点:

  1. 堪称完美

缺点:

  1. 实现较为复杂

推荐指数:★★★★(实现复杂,扣掉一颗星)

聊一聊JS的继承

原文地址:https://www.cnblogs.com/yiyi17/p/8430827.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved