js原型链和继承
在了解js原型链之前构造函数、原型对象、对象实例这几种概念必须要明白。
1. 创建对象有几种方法
//原型链指向object
var o1={name:'o1'};
var o11=new Object({name:'o11'});//通过new来声明对象
var M=function(){this.name='o2'} //使用显示的构造函数创建对象
var o2=new M();
var P={name:'o3'};
var o3=Object.create(P)
每个对象都有一个__proto__属性,指向这个对象的构造函数的原型对象。
2. 构造函数和普通函数的区别
(1)构造函数内部会创建一个新的对象实例;函数内部this指向新创建的实例;默认的返回值是f的实例。
(2)在调用函数的内部不会创建新的对象;this指向函数调用的对象,如果没有对象调用,默认是window;返回值由return语句决定。
3. 原型对象
在声明一个函数的时候就会有prototype属性,就是原型对象,原型对象内部包含一个constructor属性,指向构造函数本身。
4. 构造函数、原型和实例的关系
每个构造函数都有一个原型对象(prototype),原型对象都包含一个指向构造函数的指针(constructor),而实例都包含一个指向原型对象的内部指针(__proto__)。
构造函数----prototype原型对象-----__proto__---原型对象。
5. 原型链
当调用某种方法或者查找某种属性时,首先会在自身查找和调用,如果自身没有该属性或方法时,则会去他的__proto__属性中去查找,也就是去他的构造函数的原型对象中去查找。
如果我们让原型对象等于另一个类型的实例,此时的原型对象将包含一个指向另一个原型的指针,此关系层层递进,构成实例与原型的链条。例子:
function Type(){
this.proporty = true;
} Type.proptotype.getValue = function(){
return this.proporty;
}
function SubType(){
this.subproporty = false;
} // 继承了Type
SubType.prototype = new Type(); SubType.prototype.getSubValue = function(){
return this.subproporty;
} var result = new SubType();
alert(result.getValue()) // true
以上代码分别定义两个类型,每个类型分别有一个属性和方法。它们的主要区别是subType继承了Type,而继承是通过创建Type的实例,并将改实例赋给subType.prototype实现的。实现的本质是重写原型对象,代之以一个新的类型的实例。
也就是原来存在于Type实例中所有的属性和方法都被SubType继承。
最终,result指向subType的原型,而SubType的原型又指向Type的原型。
6. 继承
原型链是实现继承的主要方法,基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。
最后,两个相等
function Fn(){}
var f = new Fn()
实例的隐式原型(__proto__)指向它的构造函数的显示原型(prototype)即 f.__proto__=== Fn.prototype // true
构造函数的原型里有一个constructor属性指向构造函数本身 即 Fn.prototype.constructor === Fn //true
js原型链和继承的更多相关文章
- js原型链与继承(初体验)
js原型链与继承是js中的重点,所以我们通过以下三个例子来进行详细的讲解. 首先定义一个对象obj,该对象的原型为obj._proto_,我们可以用ES5中的getPrototypeOf这一方法来查询 ...
- 深入理解JS原型链与继承
我 觉得阅读精彩的文章是提升自己最快的方法,而且我发现人在不同阶段看待同样的东西都会有不同的收获,有一天你看到一本好书或者好的文章,请记得收藏起来, 隔断时间再去看看,我想应该会有很大的收获.其实今天 ...
- JS原型链与继承别再被问倒了
原文:详解JS原型链与继承 摘自JavaScript高级程序设计: 继承是OO语言中的一个最为人津津乐道的概念.许多OO语言都支持两种继承方式: 接口继承 和 实现继承 .接口继承只继承方法签名,而实 ...
- js 原型链和继承(转)
在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的 new 到底是干什么的 1. 什么是 JS 原型链? 我们知道 JS 有对象,比如 var ob ...
- 小谈js原型链和继承
原型(prototype)在js中可是担当着举足轻重的作用,原型的实现则是在原型链的基础上,理解原型链的原理后,对原型的使用会更加自如,也能体会到js语言的魅力. 本文章会涉及的内容 原型及原型对象 ...
- 【转】js原型链与继承
原文链接:https://blog.csdn.net/u012468376/article/details/53127929 一.继承的概念 继承是所有的面向对象的语言最重要的特征之一.大部分的o ...
- js 原型链与继承
var A = function(){ this.name="xiaoming"; } A.prototype.age=9; var a = new A(); console.lo ...
- js原型链、继承、this指向等老生常谈却依然不熟的知识点——记录解析
开始记录学习过程—— 很详细的解析过程——https://juejin.im/post/5c72a1766fb9a049ea3993e6 借鉴阅读——https://github.com/KieSun ...
- js原型链+继承 浅析
名称: prototype--原型对象 __proto__--属性 原型链与继承网上搜索定义,看起来挺绕的 .先说继承: 所有的对象实例都可以共享原型对象包含的属性和方法 例如一个实例A ...
随机推荐
- java项目部署后的文件路径获取
//eclipse部署工程 String path = request.getServletContext().getRealPath( File.separator+ "WEB-INF&q ...
- 二级指针 (C语言)
二级指针又叫双指针.C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针.C++中可以使用引用类型来实现. 下面讲解C中的二级指针的使用方法. 例如我们使用指针来交换两个整型变量的值 ...
- 翻翻git之---给传统的搜索增添友好动画 JJSearchViewAnim
转载请注明出处:王亟亟的大牛之路 这篇我又是个酱油,只是传播好东西也是一份功德. 由于节前被告知节后要把之前的EC项目翻成AS.那肯定要做一些加入新功能和旧实现替代的事,所以这两天也比較忙,正好另一些 ...
- MySQL是如何做到安全登陆
首先Mysql的密码权限存储在mysql.user表中.我们不关注鉴权的部分,我们只关心身份认证,识别身份,后面的权限控制是很简单的事情.在mysql.user表中有个authentication_s ...
- Spring学习10-SpringMVC入门
二.SpringMVC请求处理流程 其中Front controller :前端控制器 Controller:后端控制器 三.Spring核心组件及请求处理流程
- mysql数据库批量操作
批量KILL会话: 1.首先,根据条件将查询到要kill的进程写入文件:如:desc information_schema.processlist; SELECT concat('KILL ',id, ...
- yield return关键字怎么使用?
在迭代器块中用于向枚举数对象提供值或发出迭代结束信号.它的形式为下列之一: 复制代码 yield return <expression>;yield break; 备注计算表达式并以枚举数 ...
- 1.apache php mysql phpmyadmin的安装配置
一.安装apache ①.双击文件Apach_2.2.8_win32-x86-no_ssl.msi,弹出欢迎界面.单NEXT按钮,进入到License Agreement(许可协议)界面. 同意并ne ...
- UASCO Wormholes 解析 and C 语言实现
题目大意: 农场有N个洞(2<=N<=12,N为偶数),且组成N/2个连接对.每一个洞的给出平面坐标(x,y). 假设A和B相连,则进入A会从B出来,进入B会从A出来.有仅仅会沿着x轴正方 ...
- mysql_windows解压包安装
WIN下安装64位的解压版mysql-5.6.24-winx64 参考如下安装步骤: 1.将解压缩后的文件放到自己想要的地方 并配置环境变量. 示例中存放的目录为:D:\Program Files\m ...