js实现继承的两种方式
这是面试时面试官会经常问到问题:
js的继承方式大致可分为两种:对象冒充和原型方式;
一、先说对象冒充,又可分为3种:临时属性方式、call()、apply();
1、临时属性方式:

当构造对象son的时候,,调用temp相当于启动Person的构造函数,值得注意的是,这里上下环境中的this对象是son的实例,所以在执行person的构造函数脚本时,所有person的变量及函数都会赋值给this所指的对象,也就是son的实例,这样就达到了son继承person的属性和方法的目的。而之后删除临时引用的temp,是防止维护son中对person的类对象(不是实例对象)的引用更改,因为更改temp会导致类person(注意不是类person的对象)的及结构变化。
2、call()方法:
该方法也是通过改变this指向达到继承的目的,是function中定义的方法,所以我们定义的每一个函数都有这个方法;

通过该方法改变了this指向,调用了person里的方法;原理同临时属性方式相似;
也可以这么写:

第一个参数是simon,说明应该赋予say()函数中的this关键字值是simon;
之后的参数是字符串与person的参数的匹配值。
3、apply()
原理与call()一样,也是function中的方法,用法也与call类似:只是参数传入的形式为数组;

面试时常会问道call与apply的区别,这点值得注意。
二、原型链继承
这点涉及到了对象的原型链相关知识,指利用了prototype或者说以某种方式覆盖了prototype,从而达到属性方法复制的目的。其实现方式有很多中,可能不同框架多少会有一点区别,但是我们把握住原理,就不会有任何不理解的地方了。

原型链方法说的简单点就是将person函数当成son函数的原型对象,利用原型对象中的属性与方法是可以继承的这个属性,变相的继承person中的方法。
蛋值得注意的是,原型链方法是不可以传参数的,要想传参,则要与call或者apply混合使用。
三、优缺点
call/apply:优:1、可以实现多重继承 2、可以初始化继承自父类的参数;
缺:浪费内存资源,所有的实例都会拥有一份成员方法的副本;
原型链继承:用子类构造函数的参数去初始化父类属性是无法实现的。
以上是我在学习过程中,对各种资料总结后的个人认识,如过有不恰当或者错误的地方,请留言指正,谢谢啦~
js实现继承的两种方式的更多相关文章
- js实现继承的5种方式 (笔记)
js实现继承的5种方式 以下 均为 ES5 的写法: js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承 ...
- js 实现继承的几种方式
//js中实现继承的几种方式 //实现继承首先要有一个父类,先创造一个动物的父类 function Animal(name){ this.name = name; this.shoot = funct ...
- js 实现继承的6种方式(逐渐优化)
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- js实现继承的5种方式
js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...
- javascript 继承的两种方式
js中继承可以分为两种:对象冒充和原型链方式 一.对象冒充包括三种:临时属性方式.call()及apply()方式1.临时属性方式 代码如下: function Person(name){ t ...
- 深入浅出js实现继承的7种方式
给大家介绍7中js继承的方法 有些人认为JavaScript并不是真正的面向对象语言,在经典的面向对象语言中,您可能倾向于定义类对象,然后您可以简单地定义哪些类继承哪些类(参考C++ inherita ...
- JavaScript面向对象(三)——继承与闭包、JS实现继承的三种方式
前 言 JRedu 在之前的两篇博客中,我们详细探讨了JavaScript OOP中的各种知识点(JS OOP基础与JS 中This指向详解 . 成员属性.静态属性.原型属性与JS原型链).今天 ...
- JS 面向对象 ~ 继承的7种方式
前言: 继承 是 OO 语言中的一个最为人津津乐道的概念.许多 OO 语言都支持两种继承方式:接口继承 和 实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.如前所述,由于函数没有签名,在 ...
- js原型继承的几种方式
1. 原型链继承 2,构造函数继承(对象冒充继承) 3,组合继承(原型链继承+构造函数继承) 4,原型式继承 5. 寄生组合式继承 一.原型链继承 function Show(){ this.name ...
随机推荐
- php自学提升进阶路线
为了自己对php的系统全面深入的掌握,我通过个人经验,以及搜索网上高手经验,汇总了一份php自我学习路线规划,包括实战演练.学习建议.高手进阶.常见问题和测试总结五块.算是一个系统的学习计划和目标吧. ...
- jQuery整体架构源码解析(转载)
jQuery整体架构源码解析 最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性, ...
- Google Tensorflow 源码编译(三):tensorflow<v0.5.0>
这几天终于把tensorflow安装上了,中间遇到过不少的问题,这里记录下来.供大家想源码安装的参考. 安装环境:POWER8处理器,Docker容器Ubuntu14.04镜像. Build Tens ...
- PowerProfile.java与power_profile.xml
转载自http://blog.csdn.net/green1900/article/details/42427871 现在诸多关于电池管理的应用做的极其绚烂,可实现如耗电应用排行.剩余时间计算.关闭耗 ...
- Linux 目录配置
一.Linux 目录配置标准:FHS FHS(Filessystem Hierarchy Standard) 的重点在于规范每个特定的目录下应该要放置什么样子的数据. FHS依据文件系统使用的频繁与否 ...
- Python DES 加密解密,就是大家所谓想要的那个非常快速的方法
这个要借助Crypto.Cipher这个插件来实现的,引用后只需要写如下代码即可 from Crypto.Cipher import DES class MyDESCrypt: key = chr(1 ...
- 如何用 JIRA REST API 创建 Issue
简介 最近需要把一个Excel里的issues list全部到JIRA上create 一遍, 总不能手动创建百十来个issues吧, 本文讲述一下如果调用JIRA提供的Rest API 来自动创建is ...
- NPOI Excel 单元格背景颜色对照表
NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 FillForegroundColor 属性实现 Excel 单元格的背景色设置,FillP ...
- 如何通过JavaScript构建Asp.net服务端控件
摘要 虽然ASP.NET的服务器控件一直被大家所诟病,但是用户控件(ACSX)在某些场景下还是非常有用的. 在一些极特珠的情况下,我们会使用JavaScript动态的构建页面中的控件,但假设遇到了我要 ...
- Google Protocol Buffer 的使用和原理[转]
本文转自: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构 ...