<!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原型链初识相关推荐

  1. javascript原型链中 this 的指向

    为了弄清楚Javascript原型链中的this指向问题,我写了个代码来测试: var d = {d: 40};var a = {x: 10,calculate: function (z) {retu ...

  2. 深度解析JavaScript原型链

    深度解析JavaScript原型链 文章目录 深度解析JavaScript原型链 前言 JavaScript原型链,这里只分享我自己的见解 一.原型链是什么 二.心得 三图解 总结 前言 JavaSc ...

  3. JavaScript原型链污染攻击

    前言 最近在看js的时候看到p神的一篇关于js原型链污染的文章,学习一下. 下面转自p神:深入理解 JavaScript Prototype 污染攻击 还有一篇案例关于js原型链污染的ctf题:从一道 ...

  4. JavaScript 原型链和继承面试题

    JavaScript 原型链和继承问题 JavaScript 中没有类的概念的,主要通过原型链来实现继承.通常情况下,继承意味着复制操作,然而 JavaScript默认并不会复制对象的属性,相反,Ja ...

  5. JavaScript 原型链常用方法

    JavaScript 原型链常用方法 对象属性类型 数据属性 Configurable(表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性) En ...

  6. 技术分享经典 javaScript原型链面试题

    技术分享 javaScript原型链 一个小题目 前置知识 变量提升和函数提升 this指针的指向 原型链是什么 new操作符的工资流程 一个小题目 今天我们部门的技术分享上出现了这样一段代码: fu ...

  7. 如何理解JavaScript原型链

    如何理解JavaScript原型链 实例对象与原型对象的关系 构造函数.原型对象和实例对象之间的关系 原型链结构图 函数在原型链中的结构 原型链的理解和总结 实例对象与原型对象的关系 构造函数.原型对 ...

  8. JavaScript原型链以及Object,Function之间的关系

    JavaScript里任何东西都是对象,任何一个对象内部都有另一个对象叫__proto__,即原型,它可以包含任何东西让对象继承.当然__proto__本身也是一个对象,它自己也有自己的__proto ...

  9. 理解JavaScript原型链

    JavaScript中的每个对象都有一个prototype属性,我们称之为原型,而原型的值也是一个对象,因此它也有自己的原型,这样就串联起来了一条原型链,原型链的链头是object,它的prototy ...

最新文章

  1. MySQL数据库实用教程考核_《MySQL数据库实用教程》郑明秋,蒙连超,赵海侠【pdf】...
  2. JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!)
  3. [C++调试笔记]求电势posi.cpp
  4. 和菜鸟一起学c++之虚函数
  5. env-cmd is not recognized as an internal or external command
  6. STL容器及其简单应用(stack、priority_queue、vector、deuqe、list、map/multimap、set/multiset)
  7. WPF中解决内存泄露的几点提示与解决方法
  8. CSS之Background-clip属性
  9. html5中如何实现跑马灯效果,h5_实现跑马灯效果
  10. python字符串转64位数字_python-将String转换为64位整数映射字符以自定义两位值映射...
  11. 响应式Web设计:HTML5和CSS3实战 笔记
  12. telink ble mesh 介绍
  13. 免费的上网行为管理系统和软路由系统推荐。
  14. 用BVP一比一还原自如客APP裸眼3D效果(Android原生)
  15. 搜图出处的软件_以图搜图搜gif图片出处来源的懒人小工具
  16. 30分钟java桌球小游戏_30分钟完成桌球小游戏项目
  17. EF Core codefirst数据迁移操作
  18. python写乘法口诀表好记方法_乘法口诀表好记方法
  19. BUUCTF-刷题记录-3
  20. 【人工智能项目】- 深度学习实现猫狗大战

热门文章

  1. Matlab中char函数的使用
  2. MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently
  3. WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).
  4. Vue+SpringBoot+Mybatis+Mysql前后端分离案例
  5. 智能多用型防虹吸性能试验装置正式研发成功
  6. UVA11300 Spreading the Wealth
  7. Mac Windows Linux大一统文件系统格式:exfat(支持4G以上文件)
  8. 编写SQL语句查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数
  9. 微信网页开发(4)--使用JSSDK基础接口
  10. can't connect to to MySQL server on 'localhost'(10061)