给自己关于原型的学习分了一个大类,主要跟踪学习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)”。

最新文章

  1. Ajax跨域问题的两种解决方法
  2. UnityContainer 实现DI
  3. Codeforces Round #246 (Div. 2) A. Choosing Teams
  4. 自定义控件TextView
  5. [Codeforces677C]Vanya and Label(组合数学,快速幂)
  6. PHPExcel导出excel
  7. 转:完善eclipse+pdt作php开发中的代码提示能力
  8. ThinkPHP中的CURD操作
  9. Ubuntu 14.04 配置FTP
  10. JS里try...catch...finally详解,以及console日志调试(console.log、console.info等)
  11. Mysql查询某字段值重复的数据
  12. Mysql 快速指南
  13. 使用容器编排工具docker swarm安装clickhouse多机集群
  14. mysql学习笔记--数据库事务
  15. boost asio 学习(九) boost::asio 网络封装
  16. 大数据新手之路三:安装Kafka
  17. 在windows server上配置java jdk后,可能要些时间生效。
  18. flask 简单的语音识别
  19. Maven下载私服上的jar包
  20. 当music-list向上滑动的时候,设置layer层,随其滚动,覆盖图片,往下滚动时候,图片随着展现出来

热门文章

  1. More DETAILS! PBR的下一个发展在哪里?
  2. java中md5加密方法
  3. 我在Windows下的第一个Shellcode
  4. JPA(API)
  5. 4. sudo,PATH环境变量,修改字符集,ntpserver,加大文件描述符,隐藏内核版本,锁定关键系统文件
  6. myeclipse无法导入项目
  7. 环境变量配置文件,本地登录前提示信息/etc/issue
  8. WindowsServer2012 搭建域错误“本地Administraor账户不需要密码”
  9. 每周.NET前沿技术文章摘要(2017-06-07)
  10. a 标签的四种样式