当前位置:
首页 > 网站开发 > JavaScript教程 >
-
js原型和原型链
一、原型prototype和__proto__
先记两句话:
➀ 每个对象都有一个__proto__属性,并且指向他的prototype原型对象。
➁ 每个构造函数都有一个prototype原型对象,prototype原型对象的constructor等于构造函数本身。
var Person = function(name,age) { this.name = name; this.age = age; } Person.prototype.run = function() { console.log('running'); } var me = new Person('小明',10); // ➀ 每个对象都有一个__proto__属性,并且指向他的prototype原型对象。 console.log(me.__proto__===Person.prototype); // true // ➁ 每个构造函数都有一个prototype原型对象,prototype原型对象的constructor等于构造函数本身 console.log(Person.prototype.constructor==Person); // true
一张图示说明实例、原型对象、构造函数三者之间的关系。
这里有人会问__proto__和prototype是干吗用的?
prototype相当于所有实例对象可以访问的一个公共容器,实例对象的__proto__
指向构造函数的prototype
,从而实现继承,
上图中me这个实例对象拥有了run方法。
二、原型链
当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向下搜索,直到找到一个名字匹配的属性或到达原型链的末尾。
在查找me.toString()方法时依次向上查找,终于通过me.__proto__.__proto__.toString找到了该方法。
原型链查找顺序:me---> me.__proto__ ---> me.__proto__.__proto__ ---> null
这就是所谓原型链,层层向下找,没有就返回undefined。
出处:https://www.cnblogs.com/tsl0324/p/14507082.html
最新更新
Python获取微信好友数据
Python 的排序方法 sort 和 sorted 的区别
WinForm轻松实现自定义分页 (转载)
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
在win系统安装配置 Memcached for PHP 5.3 图文
箱图在数据预处理中的应用
Python WEB开发:用Tornado框架制作简易【表
自从学会了用python解析视频,都不用去找
Python代码阅读(第50篇):对列表间隔取
Python爬虫+数据分析+可视化展示,分析《
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
链接服务器读取Mysql---出现消息 7347,级别
SQL Server解惑——为什么你拼接的SQL语句换
MySQL视图了解一下
laf.js - 开源的云开发框架(README.md)
javascript创建对象
Node.js 源码分析 - 从 main 函数开始
Node.js 源码分析 - 原生模块(C++模块)的注册
ECharts图标中用的js相关的处理方法
GoJS 使用笔记
单元测试 - 测试场景记录
Node.js 源码分析 - 加载 js 文件
ES6入门
聊聊动效降级