当前位置:
首页 > 网站开发 > 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
最新更新
01 Web应用模式
python 约瑟夫生者小游戏 用list实现
DBPack 赋能 python 微服务协调分布式事务
PYTHON之SELENIUM调用XPATH实现网页操作
Python双人五子棋
matplotlib可视化系列之【排版】
C# 编写一个简单易用的 Windows 截屏增强工
Python 引用其他路径下的module
【Python - 基础】基础是一切升华的根本
自动化办公:手机号码提取器,使用正则
三大常用数据库事务详解之三:事务运行
三大常用关系型数据库事务详解之二:基
三大关系型数据库事务详解之一:基本概
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
js将一段字符串的首字母转成大写
纯原生html编写的h5视频播放器
H5仿原生app短信验证码vue2.0组件附源码地
TypeScript(4)接口
TypeScript(3)基础类型
TypeScript(2)WebStorm自动编译TypeScript配置
TypeScript(1)介绍与安装
ES6 - promise(1)
ES6 - promise(2)
ES6 - promise(3)