先从_proto_下手理解原型--原型学习(一)
给自己关于原型的学习分了一个大类,主要跟踪学习js的原型。--来自《JavaScript面向对象编程指南》的笔记,这本书难度适中,适合我们这种js基础不牢的人学习。
原型这块有两个属性:prototype 和 _proto_,容易别混淆,看了前面的基础,决定从这里开始整理我的学习笔记。
先上上代码理解:
var monkey = { //声明一个对象
feeds : "bananas", //定义一些属性
breathes: "air"
}; function Human() { //创建一个构造函数 Human } Human.prototype = monkey; //将Human的原型指向 monkey var adou = new Human(); //实例化一个Human对象 adou.feeds = "rice"; //对这个对象添加属性,这里覆盖原型中的同名属性,(因为对象自身属性会高于原型属性)
adou.hobby = "sleep";//添加一个原型中没有的属性 console.log(adou.feeds); //rice
console.log(adou.hobby); //sleep
以上的代码很简单, 最后输出的都是我们自己知道的,包括接下来,下面这行代码的输出也是我们所料想的,
console.log(adou.breathes); //air
我们在实例化adou这个对象的时候,并没有给他添加breathes这属性,为什么会输出air的值呢,有人说,是因为new的时候,继承了原型的属性和方法,对,是这样的,但是,它靠什么继承或者说靠什么找到monkey的breathes的属性呢?靠的就是这么一个神秘的链接 ._proto_ 。我们再来想想,adou是 human 实例化出来的,human 的原型指向了monkey,也就有了monkey的方法属性,adou本身没有这个breathes属性的,在调用adou.breathes的时候,就先从adou这个对象中找,没有找到,然后就去它的原型中,欸,找到了,然后就返回了这个属性值。 也就是说 adou._proto_ === monkey; 返回值是 ture
到这里,我们就可以理解这个原型链了:实例化出来一个对象,然后查找他的属性时候,会先从他的本身去查找,如果没有找到,再从他的原型中去找,找到则返回值,找不到就返回undefined。这个查找的过程就是原型链查找的过程。
还有一个需要区分的是_proto_ 和prototype: _proto_是一个实例对象的属性,prototype是一个构造器函数的属性。看图理解:
打开object 看看就知道了,就像这样的
adou._proto_ 里面有这个_proto_ : object
结束语:里面有两个词 constructor 和prototype 这个是原型学习绕不开的点,我先从原型链中讲出这个链到底什么,然后再细细的将前面饶人的小点。继续开贴!
如有错误之处,敬请批评指出!
每日一句:Past studies have found that people have a tendency to use more positive-inflected words than negative ones ― "fantastic" rather than "awful"。
翻译:以往的研究表明,相比消极性的词汇,人们倾向于使用更具积极意味的词汇。比如,更喜欢用“美妙的(fantastic)”而非“糟糕的(awful)”。
最新文章
- Ajax跨域问题的两种解决方法
- UnityContainer 实现DI
- Codeforces Round #246 (Div. 2) A. Choosing Teams
- 自定义控件TextView
- [Codeforces677C]Vanya and Label(组合数学,快速幂)
- PHPExcel导出excel
- 转:完善eclipse+pdt作php开发中的代码提示能力
- ThinkPHP中的CURD操作
- Ubuntu 14.04 配置FTP
- JS里try...catch...finally详解,以及console日志调试(console.log、console.info等)
- Mysql查询某字段值重复的数据
- Mysql 快速指南
- 使用容器编排工具docker swarm安装clickhouse多机集群
- mysql学习笔记--数据库事务
- boost asio 学习(九) boost::asio 网络封装
- 大数据新手之路三:安装Kafka
- 在windows server上配置java jdk后,可能要些时间生效。
- flask 简单的语音识别
- Maven下载私服上的jar包
- 当music-list向上滑动的时候,设置layer层,随其滚动,覆盖图片,往下滚动时候,图片随着展现出来
热门文章
- More DETAILS! PBR的下一个发展在哪里?
- java中md5加密方法
- 我在Windows下的第一个Shellcode
- JPA(API)
- 4. sudo,PATH环境变量,修改字符集,ntpserver,加大文件描述符,隐藏内核版本,锁定关键系统文件
- myeclipse无法导入项目
- 环境变量配置文件,本地登录前提示信息/etc/issue
- WindowsServer2012 搭建域错误“本地Administraor账户不需要密码”
- 每周.NET前沿技术文章摘要(2017-06-07)
- a 标签的四种样式