js封装、继承
封装: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封装、继承的更多相关文章
- JS封装继承函数
function extend(child,parent){ var F=function(){} F.prototype=parent.prototype; child.prototype=new ...
- JS对象继承篇
JS对象继承篇 ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的 原型链 其基本思路是利用原型让一个引用类型继承另一个引用类型的属性和方法 function Person() ...
- 浅谈JS的继承
JS继承 继承是OO语言中最为人津津乐道的概念,许多OO语言都支持两种方式的继承:接口继承:实现继承. 接口继承:只继承方法签名. 实现继承:继承实际的方法. 由于ES里函数没有签名,所以在ES里面无 ...
- JS类继承常用方式发展史
JS类继承常用方式发展史 涉及知识点 构造函数方式继承 1-继承单个对象 1.1 多步走初始版 1.2 多步走优化版 1.3 Object.create()方式 2-继承多个对象 2.1 遍历 Obj ...
- js对象的几种创建方式和js实现继承的方式[转]
一.js对象的创建方式 1. 使用Object构造函数来创建一个对象,下面代码创建了一个person对象,并用两种方式打印出了Name的属性值. var person = new Object(); ...
- 浅谈js中继承的理解和实现
一.前言 java.C#等正统面向对象语言都会提供类似extend之类的处理类的继承的方法,而javascript并没有提供专门的方法用于继承,在javascript中使用继承需要一点技巧.js中实例 ...
- js各种继承方式和优缺点的介绍
js各种继承方式和优缺点的介绍 作者: default 参考网址2 写在前面 本文讲解JavaScript各种继承方式和优缺点. 注意: 跟<JavaScript深入之创建对象>一样,更像 ...
- JS高级---继承
继承 面向对象编程思想: 根据需求, 分析对象, 找到对象有什么特征和行为, 通过代码的方式来实现需求, 要想实现这个需求,就要创建对象 ,要想创建对象, 就应该显示有构造函数, 然后通过构造函数来创 ...
- 基础3:js实现继承的多种方式
js实现继承的多种方式 1. 原型链继承 function Parent() { this.name = 'xwk' } Parent.prototype.getName = function() { ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
随机推荐
- Vue——解决报错 Computed property "****" was assigned to but it has no setter.
在最近的项目中遇到了如下的警告信息: [Vue warn]: Computed property " currentStep" was assigned to but it has ...
- 第1节 Scala基础语法:scala中的方法源码分析
val list=List(1,2,3,4) list.reduce((x:Int,y:Int)=>x+y)--->list.reduceLeft((x:Int,y:Int)=>x+ ...
- 浏览器输入URL后HTTP请求返回的完整过程
图:
- Day11 - L - 邂逅明下 HDU - 2897
当日遇到月,于是有了明.当我遇到了你,便成了侣.那天,日月相会,我见到了你.而且,大地失去了光辉,你我是否成侣?这注定是个凄美的故事.(以上是废话)小t和所有世俗的人们一样,期待那百年难遇的日食.驻足 ...
- Python 基础之模块之os os.path 及os与shutil对比
一: os 对系统进行操作 #注:以下操作都在linux环境下操作,且很多运行之前需要做好相关条件import os#(1)system() 在python总执行系统命令#os.system(&quo ...
- Js为Dom元素绑定事件须知
为异步加载的Dom 元素绑定事件必须在加载完成之后绑定: $('body').load('LearnClickBinding.ashx');$('a').click(function () { ale ...
- js对象无法当成参数传递 解决方法
思路:把对象转换为字符串进行传递 function test(){ var objParam = {"key":"value"}; var strObj = J ...
- centos6忘记root密码
Centos6 1.在开机时不要自动进入系统,按任意键进入GRUB引导菜单 2.按E键进入编辑模式 3.选中kernel选项继续按E键 4.在结尾处添加single关键字后按ENTER保存退出 5.之 ...
- [LuoguP1025][数据加强]数的划分
原题连接:Click 加强数据:Click Solution 参考博客:Click 题目意思非常明确了,这是一道组合数学的题目.我就直接讲dp解法了. dp 题意可以转化为将\(n\)个苹果放进\(k ...
- P1435 回文字串(LCS问题)
题目背景 IOI2000第一题 题目描述(题目链接:https://www.luogu.org/problem/P1435) 回文词是一种对称的字符串.任意给定一个字符串,通过插入若干字符,都可以变成 ...