封装:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html

继承:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html

    http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html

原型链继承:

        //  父类
function Persion(name,age){
this.name = name;
this.age = age;
}
// 父类的原型对象属性
Persion.prototype.id = 110;
// 子类
function Boy(sex){
this.sex = sex;
}
// 继承实现
Boy.prototype = new Persion('雷佳',25);
var b = new Boy();
console.log(b.name)// 雷佳

  优点:子类不仅仅可以访问父类原型上的属性和方法,同样也可以访问从父类构造函数中复制的属性和方法

  缺点:1.一个子类原型更改子类原型从父类继承来的引用类型属性就会直接影响其他子类;
     2.由于子类实现的继承是靠其原型对父类的实例化实现的,因此在创建父类的时候,是无法向父类传递参数的,因而在实例化父类时也无法对父类构造函数的属性进行初始化。

构造继承:

       //  父类
function Persion(name,age){
this.name = name;
this.age = age;
}
// 父类的原型对象属性
Persion.prototype.id = 110;
// 子类
function Boy(name,age,sex){
//call apply 实现继承
Persion.call(this,name,age);
this.sex = sex;
}
var b = new Boy('雷佳',25,'女');
console.log(b.name)// 雷佳
console.log(b.id)//undinfind 父类的原型对象并没有继承

  优点:避免了引用类型的属性被所有实例共享,而且可以在子类中向父类传参

  缺点:这种类型的继承没有涉及原型prototype,所以父类的原型方法自然不会被子类继承,而要想被子类继承就必须把放在构造函数里,这样创建出来的每个实例都会单独拥有一份而不能共用,这样就违背了代码复用的原则

混合继承:

基于此,为了综合这两种模式的优点,就有了组合继承。

     //  父类
function Persion(name,age){
this.name = name;
this.age = age;
}
// 父类的原型对象属性
Persion.prototype.id = 110;
// 子类
function Boy(name,age,sex){
//call apply 实现继承
Persion.call(this,name,age);
this.sex = sex;
}
// 原型继承实现 参数为空 代表 父类的实例和父类的原型对象的关系了
Boy.prototype = new Persion();
var b = new Boy('雷佳',25,'女');
console.log(b.name)// 雷佳
console.log(b.id)//

首先,在子类构造函数执行了父类构造函数,然后子类原型上实例化父类就是组合模式。如此,组合式继承就融合了原型链继承和构造函数继承的优点,并且过滤了其缺点。

js封装、继承的更多相关文章

  1. JS封装继承函数

    function extend(child,parent){ var F=function(){} F.prototype=parent.prototype; child.prototype=new ...

  2. JS对象继承篇

    JS对象继承篇 ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的 原型链 其基本思路是利用原型让一个引用类型继承另一个引用类型的属性和方法 function Person() ...

  3. 浅谈JS的继承

    JS继承 继承是OO语言中最为人津津乐道的概念,许多OO语言都支持两种方式的继承:接口继承:实现继承. 接口继承:只继承方法签名. 实现继承:继承实际的方法. 由于ES里函数没有签名,所以在ES里面无 ...

  4. JS类继承常用方式发展史

    JS类继承常用方式发展史 涉及知识点 构造函数方式继承 1-继承单个对象 1.1 多步走初始版 1.2 多步走优化版 1.3 Object.create()方式 2-继承多个对象 2.1 遍历 Obj ...

  5. js对象的几种创建方式和js实现继承的方式[转]

    一.js对象的创建方式 1. 使用Object构造函数来创建一个对象,下面代码创建了一个person对象,并用两种方式打印出了Name的属性值. var person = new Object(); ...

  6. 浅谈js中继承的理解和实现

    一.前言 java.C#等正统面向对象语言都会提供类似extend之类的处理类的继承的方法,而javascript并没有提供专门的方法用于继承,在javascript中使用继承需要一点技巧.js中实例 ...

  7. js各种继承方式和优缺点的介绍

    js各种继承方式和优缺点的介绍 作者: default 参考网址2 写在前面 本文讲解JavaScript各种继承方式和优缺点. 注意: 跟<JavaScript深入之创建对象>一样,更像 ...

  8. JS高级---继承

    继承 面向对象编程思想: 根据需求, 分析对象, 找到对象有什么特征和行为, 通过代码的方式来实现需求, 要想实现这个需求,就要创建对象 ,要想创建对象, 就应该显示有构造函数, 然后通过构造函数来创 ...

  9. 基础3:js实现继承的多种方式

    js实现继承的多种方式 1. 原型链继承 function Parent() { this.name = 'xwk' } Parent.prototype.getName = function() { ...

  10. 原生JS封装Ajax插件(同域&&jsonp跨域)

    抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...

随机推荐

  1. Java基础 -5

    方法的定义与使用 方法(method)的基本定义 本次方法定义在主类之中并且由主方法直接调用,所以方法的定义语法形式如下: public static 返回值类型 方法名称([参数类型 变量, ... ...

  2. AI基础概念

    基础概念 epoch:使用训练的全部数据对模型进行一次完整的训练,被成为“一代训练”.当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次epoch.(也就是说,所有训练样本在神经网络 ...

  3. Linux之用户和用户组总结

    Linux是多用户.多任务操作系统 UID即为用户身份号码,具有唯一性,可通过UID来判断用户身份,有以下几种:UID为0,系统管理员,即root,万能:UID为1-999,系统账号,用于独立执行某些 ...

  4. Android学习笔记17:单项选择RadioButton和多项选择CheckBox的使用

    请参见 http://www.android100.org/html/201406/05/19495.html

  5. Django 学习之Django Rest Framework_序列化器_Serializer

    作用: 1.序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串. 2.反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型. 3 ...

  6. 查漏补缺之Go的Strings, bytes, runes和字符

    字节遍历,字符遍历 https://play.golang.org/p/DeZcCN9aHXo package main import ( "fmt" "unicode/ ...

  7. Autoit里用多进程模拟多线程

      一直以来Autoit都不支持多线程,因此一些需要同时运行多个循环的操作也就无法实现.这个问题在其它的某些语言里也经常出现,解决的方法就是使用多进程. 所谓多进程,就是同时运行多个子进程,每个子进程 ...

  8. 简单讲解什么是黑帽SEO

    此文章主要讲的是黑帽SEO之搜索引擎劫持: SEO(Search Engine Optimization)搜索引擎优化,简单来说,就是让网站的排名更高,比如,搜索"博客"这个关键字 ...

  9. C# FileStream 对象的Seek()方法-----转载

    原创 kevin617 发布于2010-12-08 11:22:00 阅读数 8630 收藏展开 FileStream 可以随机读写文件 使用 Seek 方法 Seek()  ----------有两 ...

  10. Pytorch 初次使用nn包

    计算图和autograd是十分强大的工具,可以定义复杂的操作并自动求导:然而对于大规模的网络,autograd太过于底层. 在构建神经网络时,我们经常考虑将计算安排成层,其中一些具有可学习的参数,它们 ...