javascript原型链初识
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>初识js原型链</title>
</head>
<body><script>function SuperType(){this.property="whyme";}SuperType.prototype.getSuperValue=function(){return this.property;}function SubType(){this.subproperty=false;}//继承了SuperTypeSubType.prototype=new SuperType();SubType.prototype.getSubValue=function(){return this.subproperty;}var instance=new SubType();//instance.constructor指向的是SuperType//这是因为原来的SubType.prototype中的constructor被重写了的缘故。alert(instance.getSuperValue()); // "whyme"//当以读取模式访问一个实例属性时,首先会在实例中搜索该属性。如果没有找到该属性,则会继续搜索实例的原型。// 在通过原型链实现继承的情况下,搜索过程就得以沿着原型链继续向上//上面的例子中,调用instance.getSuperValue()会经历三个搜索步骤//1、搜索实例 2、搜索SubType.prototype; 3、搜索SuperType.prototype,// 最后一步才会找到该方法。//在找不到属性或方法的情况下,搜索过程总是要一环一环地前行到原型链末端才会停下来。//所有引用类型默认都继承了Object,而这个继承也是通过原型链实现的。因此,所有函数的默认原型都是//Object的实例。</script>
</body>
</html>
1、原型对象、实例和构造函数的关系
2、上述例子完整的原型链视图
3、确定原型和实例的关系
第一种方式:是使用instanceof操作符,只要用这个操作符来测试实例与原型链中出现过的构造函数,结果就会返回true。
alert(instance instanceof Object); //true
alert(instance instanceof SuperType); //true
alert(instance instanceof SubType); //true
由于原型链的关系,我们可以说instance是Object、SuperType或SubType中任何一个类型的实例。因此,测试这三个构造函数的结果都返回true.
第二种方式是使用isPrototypeOf()方法。同样,只要是原型链中出现过的原型,都可以说是该原型链所派生的实例的原型。因此isPrototypeof()方法也会返回true。
alert(Object.prototype.isPrototypeOf(instance));
alert(SuperType.prototype.isPrototypeOf(instance));
alert(SubType.prototype.isPrototypeOf(instance));
javascript原型链初识相关推荐
- javascript原型链中 this 的指向
为了弄清楚Javascript原型链中的this指向问题,我写了个代码来测试: var d = {d: 40};var a = {x: 10,calculate: function (z) {retu ...
- 深度解析JavaScript原型链
深度解析JavaScript原型链 文章目录 深度解析JavaScript原型链 前言 JavaScript原型链,这里只分享我自己的见解 一.原型链是什么 二.心得 三图解 总结 前言 JavaSc ...
- JavaScript原型链污染攻击
前言 最近在看js的时候看到p神的一篇关于js原型链污染的文章,学习一下. 下面转自p神:深入理解 JavaScript Prototype 污染攻击 还有一篇案例关于js原型链污染的ctf题:从一道 ...
- JavaScript 原型链和继承面试题
JavaScript 原型链和继承问题 JavaScript 中没有类的概念的,主要通过原型链来实现继承.通常情况下,继承意味着复制操作,然而 JavaScript默认并不会复制对象的属性,相反,Ja ...
- JavaScript 原型链常用方法
JavaScript 原型链常用方法 对象属性类型 数据属性 Configurable(表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性) En ...
- 技术分享经典 javaScript原型链面试题
技术分享 javaScript原型链 一个小题目 前置知识 变量提升和函数提升 this指针的指向 原型链是什么 new操作符的工资流程 一个小题目 今天我们部门的技术分享上出现了这样一段代码: fu ...
- 如何理解JavaScript原型链
如何理解JavaScript原型链 实例对象与原型对象的关系 构造函数.原型对象和实例对象之间的关系 原型链结构图 函数在原型链中的结构 原型链的理解和总结 实例对象与原型对象的关系 构造函数.原型对 ...
- JavaScript原型链以及Object,Function之间的关系
JavaScript里任何东西都是对象,任何一个对象内部都有另一个对象叫__proto__,即原型,它可以包含任何东西让对象继承.当然__proto__本身也是一个对象,它自己也有自己的__proto ...
- 理解JavaScript原型链
JavaScript中的每个对象都有一个prototype属性,我们称之为原型,而原型的值也是一个对象,因此它也有自己的原型,这样就串联起来了一条原型链,原型链的链头是object,它的prototy ...
最新文章
- MySQL数据库实用教程考核_《MySQL数据库实用教程》郑明秋,蒙连超,赵海侠【pdf】...
- JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!)
- [C++调试笔记]求电势posi.cpp
- 和菜鸟一起学c++之虚函数
- env-cmd is not recognized as an internal or external command
- STL容器及其简单应用(stack、priority_queue、vector、deuqe、list、map/multimap、set/multiset)
- WPF中解决内存泄露的几点提示与解决方法
- CSS之Background-clip属性
- html5中如何实现跑马灯效果,h5_实现跑马灯效果
- python字符串转64位数字_python-将String转换为64位整数映射字符以自定义两位值映射...
- 响应式Web设计:HTML5和CSS3实战 笔记
- telink ble mesh 介绍
- 免费的上网行为管理系统和软路由系统推荐。
- 用BVP一比一还原自如客APP裸眼3D效果(Android原生)
- 搜图出处的软件_以图搜图搜gif图片出处来源的懒人小工具
- 30分钟java桌球小游戏_30分钟完成桌球小游戏项目
- EF Core codefirst数据迁移操作
- python写乘法口诀表好记方法_乘法口诀表好记方法
- BUUCTF-刷题记录-3
- 【人工智能项目】- 深度学习实现猫狗大战
热门文章
- Matlab中char函数的使用
- MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently
- WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).
- Vue+SpringBoot+Mybatis+Mysql前后端分离案例
- 智能多用型防虹吸性能试验装置正式研发成功
- UVA11300 Spreading the Wealth
- Mac Windows Linux大一统文件系统格式:exfat(支持4G以上文件)
- 编写SQL语句查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数
- 微信网页开发(4)--使用JSSDK基础接口
- can't connect to to MySQL server on 'localhost'(10061)