作为前端,你需要懂得javascript实现继承的方法
在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实现继承的方法相关推荐
- 深入解析JavaScript 原型继承
JavaScript 原型继承,学习js面向对象的朋友可以看看.十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Object.prototype Ja ...
- JavaScript对象继承方式
一.对象冒充 其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式).因为构造函数只是一个函数,所以可使 Parent 构造函数 成为 Children 的方法, ...
- 【前端芝士树】Javascript的原型与原型链
[前端芝士树]Javascript的原型.原型链以及继承机制 前端的面试中经常会遇到这个问题,自己也是一直似懂非懂,趁这个机会整理一下 0. 为什么会出现原型和原型链的概念 1994年,网景公司(Ne ...
- Web前端经典面试题-JavaScript
Web前端经典面试题-JavaScript 看看银行卡余额,看看工资条,看看房价,动力就来了,大二狗,加油~~ JavaScript 原型链.类.继承.作用域.闭包.js运行机制/单线程.js数据类型 ...
- 3 HTMLJS等前端知识系列之javascript的基础
preface 作为一名运维开发,必须懂得前端知识,比如javascript,dom等等,下面就聊聊javascript. include 数据格式 条件判断,循环流程等. 函数 面向对象 what ...
- word类型得实参和lpwstr类型的形参不兼容_前端测试题:(解析)关于JavaScript的数据类型,下面说法错误的是?...
考核内容: js 数据类型 题发散度: ★★ 试题难度: ★★ 解题思路: 在ES5的时候,我们认知的数据类型确实是 6种: Number.String.Boolean.undefined.objec ...
- 『前端学习笔记』 JavaScript 事件与对象、DOM与BOM
参考视频:[极客学院]Web前端开发教学 - 第一部分:H5+CSS+JS 参考文档:JavaScript 教程 W3school 文章目录 DOM对象 HTML DOM 操作HTML 操作CSS E ...
- web前端之dojo(用javascript语言实现的开源DHTML工具包)
web前端之dojo(用javascript语言实现的开源DHTML工具包) 一.开始Dojo开发 1.Dojo Toolkit 简介 Dojo 于 2004 年创建,使开发 DHTML 和 Java ...
- JavaScript 七大继承全解析
继承作为基本功和面试必考点,必须要熟练掌握才行.小公司可能仅让你手写继承(一般写 寄生组合式继承 即可),大厂就得要求你全面分析各个继承的优缺点了.这篇文章深入浅出,让你全面了解 JavaScript ...
最新文章
- 【阿里云新品发布·周刊】第12期
- Vue.js 是什么
- python3.6 websocket异步高并发_Python3.6 websocket开发
- 【theano-windows】学习笔记六——theano中的循环函数scan
- Windows xp LoadPerf系统错误
- 笑谈ArcToolbox (5) 非我族类
- 力扣-剑指offer 06 从尾到头打印链表
- 2014年07月21日
- win10自学c语言用什么软件,VC++6.0软件安装使用(win10可用),送给需要学c语言的你...
- java ftp 上传文件 无效_使用java进行ftp文件上传出现425错误
- 悼念侯耀文:慢慢消失的笑声
- 【技术贴】图文教程 最新QQ空间免费背景音乐添加方法||QQ空间免费添加背景音乐。...
- 伊美尔在港招股书失效:首次冲刺上市折戟,曾多次遭到处罚
- 数据仓库建模方法/范式建模法/维度建模法/事实表/维度表/优缺点/建模流程/概念建模/逻辑建模/物理建模
- 结对编程项目——最长英语单词链
- css和js3d粒子,使用EaselJS实现的3D球形粒子运动
- 2.石头游戏(坑爹)
- Android实现网络下载一(单任务下载--支持断点续传)
- 神经网络对多变量的性别结果预测
- 关于IDEA maven工程打jar包无法引入手动导入的jar包问题的解决方式
热门文章
- 单目摄像头光学图像测距_自动驾驶汽车传感器技术解析——车载摄像头
- excel教程自学网_我要自学网视频教程
- windows镜像_什么是windows镜像?什么是Ghost?它们有什么优缺点?
- 给你的网站添加3D地球显示的访客统计(使用RevolverMaps)
- python连接数据库oracle_python连接oracle数据库
- Cookie、token、session的区别是什么?
- Websocket实现前后台通信,demo小测试
- Python中的列表和元组
- 练习:----点击按钮文字变颜色
- 将对话框(提示框)中的内容粘贴到记事本