写这篇有关继承的文章时,突然想起,几天前的面试。因为习惯在学习知识的时候加上自己的理解,很喜欢用自己话来解释,于是乎当面试被问起继承原理时,噼里啪啦一大堆都是自己组织的话,(也可能是因为个人紧张、外加是电面,各种因素掺杂,导致了表述不清),不管怎么然后面试官就被迷茫了。so sorry~私下里可以用“俚语”解释给自己听,一上场面还是需要“官方官言”的。这也算是一种态度。

  

  依然相信绝大多数东西的存在都是有原因的。~

  为什么要继承?

  减少重复性的代码,并且尽量弱化对象间的耦合。

  类式继承

  通过用函数来声明类、用关键字new来创建实例。

  首先创建构造函数,其名称就是类名,首字母应大写。在构造函数中,创建实例属性要使用关键字this。

function Person(name) {
this.name = name;
} Person.prototype.getName = function() {
return this.name;
}; var reader = new Person("Jsno");
reader.getName(); function Author(name,books) {
Person.call(this,name);
this.books = books;
}
Author.prototype = new Person(); //重写原型链
Author.prototype.constructor = Author;
Author.prototype.getBooks = function() {
return this.books;
};

  原型式继承

var Person = {  //所有创建的其它各种类Person对象的原型对象
name: 'default name',
getName: function() {
return this.name;
}
}; var Author = clone(Person);
Author.books = [];
Author.getBooks = function() {
return this.books;
} function clone(object) {
function F() {}
F.prototype = object;
return new F;
}

  类式继承和原型继承的对比:

  原型继承更能节约资源。原型链读取成员的方式使得所有克隆出来的对象都共享每个属性和方法的唯一一份实例,只有在直接设置了某个克隆出来的对象的属性和方法时,情况才会有所变化。与此相比,在类似继承方法中创建的每一个对象在内存中都有自己的一套属性(和私用方法)的副本。原型继承在这方面的节约效果突出。这种继承也比类式继承显得更为简练。它只用到了一个clone函数,不像后者那样需要为每一个想扩展的类写上好几行像SuperClass.call(this,arg)和SubClass.prototype = new SuperClass。~原型继承所要注意的一个问题就是,万一不小心修改了原型,则会反映到所有继承了该原型的对象中。

深入js的面向对象学习篇(继承篇)——温故知新(三)的更多相关文章

  1. 深入js的面向对象学习篇——温故知新(一)

    在学习设计模式前必须要知道和掌握的***. 为类添加新方法: Function.prototype.method = function(name,fn) { this.prototype[name] ...

  2. 深入js的面向对象学习篇(封装是一门技术和艺术)——温故知新(二)

    下面全面介绍封装和信息隐藏. 通过将一个方法或属性声明为私用的,可以让对象的实现细节对其它对象保密以降低对象之间的耦合程度,可以保持数据的完整性并对其修改方式加以约束.在代码有许多人参与设计的情况下, ...

  3. C++学习之继承篇

    今天通过对实验二继承,重载,覆盖的学习,让我更深一步理解了这些概念的区别. 首先来明确一个概念,函数名即地址,也就是说函数名就是个指针. 编译阶段,编译器为每个函数的代码分配一个地址空间并编译函数代码 ...

  4. typescript 的 polyfill 学习1-Class 继承篇

    Class 继承 js 是多范式的编程语言,同样也是支持面向对象编程的,类 是面向对象中是很重要的概念. 区别于传统的java,c#基于模板的类,js是基于原型的. 类继承一般是通过原型链的方式来实现 ...

  5. 【js】面向对象学习资料

    1.面向对象模式: https://m.jb51.net/article/74549.htm 2.面向对象基础篇 http://www.cnblogs.com/chiangchou/p/js-oop1 ...

  6. JavaScript之面向对象学习八(继承)

    简介:继承是OO语言中的一个最为人津津乐道的概念.许多OO语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法. 但是JS的函数并没有签名,所以在ECMASc ...

  7. JS高级程序设计学习笔记——继承

    我们知道,在OO语言中,继承可分为接口继承和实现继承.而ECMAScript的函数没有签名,不能实现“接口继承”,只能通过原型链实现“实现继承”. 在学习了各种继承模式之后,简单总结一下各种继承模式的 ...

  8. JS高级 - 面向对象5(继承,引用)

    <script type="text/javascript"> //------------------Person类 //(Person)的构造函数 function ...

  9. JS中面向对象中的继承(常用写法)---核心部分

    1.基本概念 子类继承父类,但是不能影响父类.包括1.混合继承(构造函数+原型) 2.ES6新增class的继承. 接下来介绍,面向对象中继承的两种常用写法.即混合继承(构造函数+原型)和class继 ...

随机推荐

  1. 如何用代码开启“个人热点”功能?如何用代码把iOS设备设置成一个无线路由?

    不好意思,你办不到.苹果不允许.因为你没有权限.

  2. <转载>批处理之FOR语句祥解

    批处理之FOR语句祥解 FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能! 看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号) FOR 参数 %%变量名 IN ...

  3. IOS中的内存不足警告处理(译)

    由于在IOS中虚拟内存系统不会采用页置换的方式来获取请求内存,取而代之的是它通过移除应用程序中的强引用来释放一些内存资源,我们知道强引用在IOS中表示拥有关系,只要有至少一个变量拥有这个对象,那么对象 ...

  4. iOS开发——Touch ID 指纹识别

    项目中为了安全性,一般使用密码或iPhone手机的指纹识别Touch ID. 第一步,判断系统是否支持,iOS8.0及以上才支持. 第二步,判断手机是否支持,带Touch ID的手机iPhone5s及 ...

  5. JSON解析保存在类中

    //my.h#ifndef __1_Header_h#define __1_Header_h#define DEBUG 1#define aa 1 #ifdef aa#ifdef DEBUG#defi ...

  6. c#winform音乐制作软件

    C#音乐播放器 这个音乐播放器是winform 功能有:(括号中是值得提高的部分) 1:登陆提示(查询数据库) 2:皮肤换肤的功能(能右键或者通过按键就能实现) 3:图片的轮换(图片的地址从数据库中抽 ...

  7. 图像热点&图像映射

    图像映射 图像映射也称为图像热点. 作用: 让同一张图片上的不同区域,可以实现多个不同的超链接功能. 图示: <map>图像映射三步走: 图像映射的实现需要三方面配合完成: 1.图像映射容 ...

  8. 多文件上传 iOS功能

    多文件上传 iOS功能,原文来自ios教程网整理的,大家可以看看演示:ios.662p.com ,喜欢的朋友可以看看我的博客吧. NSURL* url = [NSURL URLWithString:@ ...

  9. 关于linux下零散的东西 --慢慢补充

    一.截图     ,使用Shift+Ctrl+PrtSc就可以截图. 二.tar命令参数 c:表示压缩 x:表示解压 z:表示gzip的方式解/压缩 j:表示bzip2的方式解/压缩 三.串口终端ke ...

  10. 2014-10 u-boot make xxx_defconfig 过程分析

    /** ****************************************************************************** * @author    Maox ...