谈谈javascript中原型继承
什么是继承?
拿来主义:自己没有,别人有,把别人的拿过来使用或者让其成为自己的
如何实现继承的方式
- 原型继承
- 混入继承
- 经典继承
1. 混入继承
由于一个对象可以继承自任意的对象,即:o可以继承自对象o1,o2,o3...,所以,把这种继承称为:混入继承
- 将其他对象中的成员加到自己身上
- 对象可以继承自任意的对象
var o1 = {name:"女娲", age: 1, gender: "female"};
var o2 = {grade: "三年级二班", score: 100};
// o2 继承 o1
for ( var k in o1 ) {
o2[k] = o1[k];
}
// 如果希望 o2 可以继承自任意的对象. 所以为了简化继承的代码
// 给 o2 提供一个方法, 叫 extend
o2.extend = function (obj) {
for (var k in obj) {
this[k] = obj[k];
}
}
o2.extend(o1); // o2 继承 o1
2 原型继承
如果需要让一个对象拥有某些属性和方法,可以把这些属性和方法放到原型对象中,因为对象会继承自原型对象,所以就获得了该属性和方法。把这种继承方式称为:原型继承
- 实现继承的方式
1 利用对象的动态特性 添加成员
2 覆盖原型对象 添加成员
3 利用混入继承 添加成员
- 原型的一些结论
1 任何函数都可以作为构造函数
2 函数默认就有一个 prototype 属性
3 函数的prototype 就是 原型
4 构造函数的prototype的类型是对象
5 通过构造函数创建出来的对象默认链接到构造函数的prototype中
6 原型的成员(属性和方法)可以被对象共享
2.1 原型继承实现方式
- 1 利用对象的动态特性
// 对象可以动态的添加属性
var o = {};
o.name = "川川";
o.age = 19;
o.gender = "男"; // -----------------------
function Person() {} // 将需要的属性添加到原型对象中
Person.prototype.sayHi = function() {}; var p = new Person();
p.sayHi();
- 2 覆盖原型对象
Person.prototype = {
sayHi: function() {},
sayNo: function() {},
sayYouAgin: function() {}
};
注意:
使用覆盖原型对象方式实现继承的时候,
推荐给这个新对象添加一个 constructor 属性(属性的值为:当前的构造函数)
目的是保持和 默认情况的原型结构一样(模拟对象的类型) 但是如果对对象的类型要求不严格可以忽略 constructor: Person
- 3 利用混入继承添加原型成员
对象2.extend( 对象1 )
3 经典继承 - Object.create
- 1 创建对象
- 2 让创建出来的对象继承自参数对象
诠释 继承是什么。 ES5提供的方法(IE9+ 开始支持)
提出者:Douglas Crockford(道格拉斯 克罗克福德) JSON作者 《JavaScript语言精粹》
作用:实现继承,即:让一个对象(o2)继承自另外一个对象(o1)
var o2 = Object.create( o1 );
- 基本语法:
var o1 = {
sayHi: function() {
alert("hello,i am chuanchuan");
}
};
var o2 = Object.create(o1);
o2.sayHi();
- 两种实现兼容的方式
// 1 给原生对象添加成员
if(!Object.create) {
Object.create = function() {
// 构造函数
function F() {}
// 继承
F.prototype = obj;
return new F();
};
} // 2 统一使用新方法(推荐)
var create = function( obj ) {
if ( Object.create ) {
return Object.create( obj );
} else { function F() {}
F.prototype = obj;
return new F();
}
}
谈谈javascript中原型继承的更多相关文章
- 谈谈javascript中的prototype与继承
谈谈javascript中的prototype与继承 今天想谈谈javascript中的prototype. 通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性 ...
- JavaScript中的继承(原型链)
一.原型链 ECMAScript中将原型链作为实现继承的主要方法,基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 实例1: function SupType() { this.pro ...
- JavaScript学习13 JavaScript中的继承
JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式 ...
- 浅谈JavaScript中的继承
引言 在JavaScript中,实现继承的主要方式是通过原型链技术.这一篇文章我们就通过介绍JavaScript中实现继承的几种方式来慢慢领会JavaScript中继承实现的点点滴滴. 原型链介绍 原 ...
- JavaScript的原型继承
JavaScript是一门面向对象的语言.在JavaScript中有一句很经典的话,万物皆对象.既然是面向对象的,那就有面向对象的三大特征:封装.继承.多态.这里讲的是JavaScript的继承,其他 ...
- 彻底搞懂JavaScript中的继承
你应该知道,JavaScript是一门基于原型链的语言,而我们今天的主题 -- "继承"就和"原型链"这一概念息息相关.甚至可以说,所谓的"原型链&q ...
- 浅谈 JavaScript 中的继承模式
最近在读一本设计模式的书,书中的开头部分就讲了一下 JavaScript 中的继承,阅读之后写下了这篇博客作为笔记.毕竟好记性不如烂笔头. JavaScript 是一门面向对象的语言,但是 ES6 之 ...
- 关于JavaScript中实现继承,及prototype属性
感谢Mozilla 让我弄懂继承. JavaScript有八种基本类型,函数属于object.所以所有函数都继承自object.//扩展:对象,基本上 JavaScript 里的任何东西都是对象,而且 ...
- javascript中各种继承方式的优缺点
javascript中实现继承的方式有很多种,一般都是通过原型链和构造函数来实现.下面对各种实现方式进行分析,总结各自的优缺点. 一 原型继承 let Super = functioin(name = ...
随机推荐
- CSS读书笔记(3)---清除浮动的几种方法
浮动元素容易造成页面错位现象.下面说说关于清除浮动的几种方法. 首先.先创建一个浮动导致错位的页面. <!DOCTYPE html> <html lang="en" ...
- vue自己写了一个div菜单,点击按钮展开,点击其他地方关闭这个div菜单
需求是通过点击body页面,在其他地方就关闭这个<div>菜单,给这个div一个id:problemList,但是点击我打开的按钮,不关闭. created () { document.o ...
- linu问题集锦
问题1 系统卡 慢 执行命令延迟/var/spool/mail下root文件过大导致/var磁盘空间92% cd / && du | sort -n | tail -n 10 查看排名 ...
- 【JavaScript框架封装】实现一个类似于JQuery的DOM框架的封装
// DOM框架(选择器框架) (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ /** * 向现 ...
- 计蒜客 阿里天池的新任务—简单( KMP水 )
链接:传送门 思路:KMP模板题,直接生成 S 串,然后匹配一下 P 串在 S 串出现的次数,注意处理嵌套的情况即可,嵌套的情况即 S = "aaaaaa" ,P = " ...
- nyoj314-斐波那契数列四吧
斐波那契数列四吧 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 斐波那契数列为:0,1,1,2,3,5,8,13....,常规递推公式为f(n)=f(n-1)+f(n- ...
- [luogu1600 noip2016] 天天爱跑步 (树上差分)
题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵 ...
- 30分钟精通React今年最劲爆的新特性——React Hooks
你还在为该使用无状态组件(Function)还是有状态组件(Class)而烦恼吗? --拥有了hooks,你再也不需要写Class了,你的所有组件都将是Function. 你还在为搞不清使用哪个生命周 ...
- jQuery点击图片放大显示原图效果
HTML部分:<div id="append_parent"></div> JS代码部分: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- HDU3236 Gift Hunting
/* HDU3236 Gift Hunting http://acm.hdu.edu.cn/showproblem.php?pid=3236 dp 滚动数组 * * */ #include <c ...