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 相关文章推荐
Hutia 的 JS 代码集
Oct 24 Javascript
js textarea自动增高并隐藏滚动条
Dec 16 Javascript
学习js在线html(富文本,所见即所得)编辑器
Dec 18 Javascript
后台获取ZTREE选中节点的方法
Feb 12 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
Apr 27 Javascript
js实现Select列表各项上移和下移的方法
Aug 14 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
Sep 01 Javascript
省市选择的简单实现(基于zepto.js)
Jun 21 Javascript
vue实现动态数据绑定
Apr 28 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
Feb 23 Javascript
element el-input directive数字进行控制
Oct 11 Javascript
javascript实现数字时钟效果
Feb 06 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
PHP对象实例化单例方法
2017/01/19 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
微信跳一跳游戏python脚本
2020/04/01 Python
TensorFlow如何实现反向传播
2018/02/06 Python
Python读取stdin方法实例
2019/05/24 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
django框架F&Q 聚合与分组操作示例
2019/12/12 Python
Python pandas库中的isnull()详解
2019/12/26 Python
25道Java面试题集合
2013/05/21 面试题
CPU不支持Windows11系统怎么办
2021/11/21 数码科技