在ES6之前,javascript不跟其他语言一样,有直接继承的方法,它需要借助于构造函数+原型对象模拟实现继承。现在我们可以利用ES6的extends方法实现继承,如果想了解更多有关ES6实现的继承请查看《ES6学习笔记(二):教你玩转类的继承和类的对象》,在这里不再做更多的介绍。

文章目录

  • 1. call()
  • 2. 借用构造函数继承父类型属性
  • 3. 借用原型对象继承父类型方法
  • 总结

ES6之前并没有给我们提供extends继承,我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承。

1. call()

调用这个函数,并且修改函数运行时的this指向

fun.call(thisArg, arg1,arg2,...)
  • thisArg:当前调用函数this的指向对象
  • arg1, arg2:传递的普通参数
function fn() {console.log('前端岚枫') console.log(this)
}
fn.call() //说明call()可以调用函数,this指向window
var obj = {name: 'lanfeng
}
fn.call(obj) //this指向obj, 说明call可以改变this指向

2. 借用构造函数继承父类型属性

核心思想:通过call()把父类型的this指向子类型的this,这样就可以实现子类型继承父类型的属性。

// 借用父构造函数继承属性
//父构造函数
function Father (uname, age) {//this指向父构造函数的对象实例this.uname = unamethis.age = age
}
// 子构造函数
function Son (uname, age){// this指向子构造函数的对象实例//借助于call,this指向子构造函数对象实例Father.call(this, uname, age)}
var son = new Son('王俊凯',18)
console.log(son) //

3. 借用原型对象继承父类型方法

// 父构造函数
function Father (uname, age) {//this指向父构造函数的对象实例this.uname = unamethis.age = age
}
// 父原型方法
Father.prototype.money = function() {console.log(10000)
}
// 子构造函数
function Son (uname, age){// this指向子构造函数的对象实例//借助于call,this指向子构造函数对象实例Father.call(this, uname, age)}// Son.prototype = Father.prototype 这样直接赋值会有问题,如果修改了子原型对象,父原型对象也会变化/
Son.prototype = new Father()//手动改constructor指回原来的构造函数
Son.prototype.constructor = Son
Son.prototype.exam= function() {console.log('考试')
}
var son = new Son('王俊凯',18)
console.log(son) //
son

结构关系如下图:

总结

今天主要分享了call()方法的用法和javascript通过构造函数+原型对象模拟实现继承的方式。

作为前端,你需要懂得javascript实现继承的方法相关推荐

  1. 深入解析JavaScript 原型继承

    JavaScript 原型继承,学习js面向对象的朋友可以看看.十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Object.prototype Ja ...

  2. JavaScript对象继承方式

    一.对象冒充 其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式).因为构造函数只是一个函数,所以可使 Parent 构造函数 成为 Children 的方法, ...

  3. 【前端芝士树】Javascript的原型与原型链

    [前端芝士树]Javascript的原型.原型链以及继承机制 前端的面试中经常会遇到这个问题,自己也是一直似懂非懂,趁这个机会整理一下 0. 为什么会出现原型和原型链的概念 1994年,网景公司(Ne ...

  4. Web前端经典面试题-JavaScript

    Web前端经典面试题-JavaScript 看看银行卡余额,看看工资条,看看房价,动力就来了,大二狗,加油~~ JavaScript 原型链.类.继承.作用域.闭包.js运行机制/单线程.js数据类型 ...

  5. 3 HTMLJS等前端知识系列之javascript的基础

    preface 作为一名运维开发,必须懂得前端知识,比如javascript,dom等等,下面就聊聊javascript. include 数据格式 条件判断,循环流程等. 函数 面向对象 what ...

  6. word类型得实参和lpwstr类型的形参不兼容_前端测试题:(解析)关于JavaScript的数据类型,下面说法错误的是?...

    考核内容: js 数据类型 题发散度: ★★ 试题难度: ★★ 解题思路: 在ES5的时候,我们认知的数据类型确实是 6种: Number.String.Boolean.undefined.objec ...

  7. 『前端学习笔记』 JavaScript 事件与对象、DOM与BOM

    参考视频:[极客学院]Web前端开发教学 - 第一部分:H5+CSS+JS 参考文档:JavaScript 教程 W3school 文章目录 DOM对象 HTML DOM 操作HTML 操作CSS E ...

  8. web前端之dojo(用javascript语言实现的开源DHTML工具包)

    web前端之dojo(用javascript语言实现的开源DHTML工具包) 一.开始Dojo开发 1.Dojo Toolkit 简介 Dojo 于 2004 年创建,使开发 DHTML 和 Java ...

  9. JavaScript 七大继承全解析

    继承作为基本功和面试必考点,必须要熟练掌握才行.小公司可能仅让你手写继承(一般写 寄生组合式继承 即可),大厂就得要求你全面分析各个继承的优缺点了.这篇文章深入浅出,让你全面了解 JavaScript ...

最新文章

  1. 【阿里云新品发布·周刊】第12期
  2. Vue.js 是什么
  3. python3.6 websocket异步高并发_Python3.6 websocket开发
  4. 【theano-windows】学习笔记六——theano中的循环函数scan
  5. Windows xp LoadPerf系统错误
  6. 笑谈ArcToolbox (5) 非我族类
  7. 力扣-剑指offer 06 从尾到头打印链表
  8. 2014年07月21日
  9. win10自学c语言用什么软件,VC++6.0软件安装使用(win10可用),送给需要学c语言的你...
  10. java ftp 上传文件 无效_使用java进行ftp文件上传出现425错误
  11. 悼念侯耀文:慢慢消失的笑声
  12. 【技术贴】图文教程 最新QQ空间免费背景音乐添加方法||QQ空间免费添加背景音乐。...
  13. 伊美尔在港招股书失效:首次冲刺上市折戟,曾多次遭到处罚
  14. 数据仓库建模方法/范式建模法/维度建模法/事实表/维度表/优缺点/建模流程/概念建模/逻辑建模/物理建模
  15. 结对编程项目——最长英语单词链
  16. css和js3d粒子,使用EaselJS实现的3D球形粒子运动
  17. 2.石头游戏(坑爹)
  18. Android实现网络下载一(单任务下载--支持断点续传)
  19. 神经网络对多变量的性别结果预测
  20. 关于IDEA maven工程打jar包无法引入手动导入的jar包问题的解决方式

热门文章

  1. 单目摄像头光学图像测距_自动驾驶汽车传感器技术解析——车载摄像头
  2. excel教程自学网_我要自学网视频教程
  3. windows镜像_什么是windows镜像?什么是Ghost?它们有什么优缺点?
  4. 给你的网站添加3D地球显示的访客统计(使用RevolverMaps)
  5. python连接数据库oracle_python连接oracle数据库
  6. Cookie、token、session的区别是什么?
  7. Websocket实现前后台通信,demo小测试
  8. Python中的列表和元组
  9. 练习:----点击按钮文字变颜色
  10. 将对话框(提示框)中的内容粘贴到记事本