JS实现面向对象继承的5种方式分析


Posted in Javascript onJuly 21, 2018

本文实例讲述了JS实现面向对象继承的5种方式。分享给大家供大家参考,具体如下:

js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式

1. 使用对象冒充实现继承(该种实现方式可以实现多继承)

实现原理:让父类的构造函数成为子类的方法,然后调用该子类的方法,通过this关键字给所有的属性和方法赋值

function Parent(firstname)
{
  this.fname=firstname;
  this.age=40;
  this.sayAge=function()
  {
    console.log(this.age);
  }
}
function Child(firstname)
{
  this.parent=Parent;
  this.parent(firstname);
  delete this.parent;
  this.saySomeThing=function()
  {
    console.log(this.fname);
    this.sayAge();
  }
}
var mychild=new Child("李");
mychild.saySomeThing();

2. 采用call方法改变函数上下文实现继承(该种方式不能继承原型链,若想继承原型链,则采用5混合模式)

实现原理:改变函数内部的函数上下文this,使它指向传入函数的具体对象

function Parent(firstname)
{
  this.fname=firstname;
  this.age=40;
  this.sayAge=function()
  {
    console.log(this.age);
  }
}
function Child(firstname)
{
  this.saySomeThing=function()
  {
    console.log(this.fname);
    this.sayAge();
  }
  this.getName=function()
  {
    return firstname;
  }
}
var child=new Child("张");
Parent.call(child,child.getName());
child.saySomeThing();

3. 采用Apply方法改变函数上下文实现继承(该种方式不能继承原型链,若想继承原型链,则采用5混合模式)

实现原理:改变函数内部的函数上下文this,使它指向传入函数的具体对象

function Parent(firstname)
{
  this.fname=firstname;
  this.age=40;
  this.sayAge=function()
  {
    console.log(this.age);
  }
}
function Child(firstname)
{
  this.saySomeThing=function()
  {
    console.log(this.fname);
    this.sayAge();
  }
  this.getName=function()
  {
    return firstname;
  }
}
var child=new Child("张");
Parent.apply(child,[child.getName()]);
child.saySomeThing();

4. 采用原型链的方式实现继承

实现原理:使子类原型对象指向父类的实例以实现继承,即重写类的原型,弊端是不能直接实现多继承

function Parent()
{
  this.sayAge=function()
  {
    console.log(this.age);
  }
}
function Child(firstname)
{
  this.fname=firstname;
  this.age=40;
  this.saySomeThing=function()
  {
    console.log(this.fname);
    this.sayAge();
  }
}
Child.prototype=new Parent();
var child=new Child("张");
child.saySomeThing();

5. 采用混合模式实现继承

function Parent()
{
  this.sayAge=function()
  {
    console.log(this.age);
  }
}
Parent.prototype.sayParent=function()
{
  alert("this is parentmethod!!!");
}
function Child(firstname)
{
  Parent.call(this);
  this.fname=firstname;
  this.age=40;
  this.saySomeThing=function()
  {
    console.log(this.fname);
    this.sayAge();
  }
}
Child.prototype=new Parent();
var child=new Child("张");
child.saySomeThing();
child.sayParent();

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
iframe 异步加载技术及性能分析
Jul 19 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
Jan 10 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
Apr 02 Javascript
jquery动态添加删除一行数据示例
Jun 12 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
Nov 28 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
Mar 11 Javascript
JS鼠标滚动分页效果示例
Jul 05 Javascript
js实现下拉框二级联动
Dec 04 Javascript
微信小程序左滑删除实现代码实例
Sep 16 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
Apr 21 Javascript
js实现拖拽元素选择和删除
Aug 25 Javascript
javascript使用正则表达式实现注册登入校验
Sep 23 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
Jul 21 #Javascript
vue项目中添加单元测试的方法
Jul 21 #Javascript
基于Vue实现关键词实时搜索高亮显示关键词
Jul 21 #Javascript
jQuery实现的点击按钮改变样式功能示例
Jul 21 #jQuery
jQuery实现输入框的放大和缩小功能示例
Jul 21 #jQuery
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 #jQuery
浅谈vue父子组件怎么传值
Jul 21 #Javascript
You might like
Php获取金书网的书名的实现代码
2010/06/11 PHP
php注销代码(session注销)
2012/05/31 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
jquery 事件对象属性小结
2010/04/27 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
python实现决策树
2017/12/21 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
美国最大的团购网站:Groupon
2016/07/23 全球购物
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
四年大学生活的个人自我评价
2013/12/11 职场文书
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
家长会邀请书
2014/01/25 职场文书
女性励志书籍推荐
2019/08/19 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
jquery插件实现图片悬浮
2021/04/16 jQuery
python之django路由和视图案例教程
2021/07/26 Python