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

先从_proto_下手理解原型--原型学习(一)的更多相关文章

  1. 【学习笔记】深入理解js原型和闭包系列学习笔记——精华

    深入理解js原型和闭包笔记: 1.“一切皆是对象”,对象是属性的集合. 丨 函数也是对象,但是使用typeof时为什么函数返回function而 丨  不是object呢,js为何要对函数做这样的区分 ...

  2. 【学习笔记】深入理解js原型和闭包(16)——完结

    之前一共用15篇文章,把javascript的原型和闭包讲解了一下. 首先,javascript本来就“不容易学”.不是说它有多难,而是学习它的人,往往都是在学会了其他语言之后,又学javascrip ...

  3. 【学习笔记】深入理解js原型和闭包(0)——目录

    文章转载:https://www.cnblogs.com/wangfupeng1988/p/4001284.html 说明: 本篇文章一共16篇章,外加两篇后补的和一篇自己后来添加的学习笔记,一共19 ...

  4. 【学习笔记】深入理解js原型和闭包(18)——补充:上下文环境和作用域的关系

    本系列用了大量的篇幅讲解了上下文环境和作用域,有些人反映这两个是一回儿事.本文就用一个小例子来说明一下,作用域和上下文环境绝对不是一回事儿. 再说明之前,咱们先用简单的语言来概括一下这两个的区别. 0 ...

  5. 【学习笔记】深入理解js原型和闭包(17)——补this

    本文对<深入理解js原型和闭包(10)——this>一篇进行补充,原文链接:https://www.cnblogs.com/lauzhishuai/p/10078307.html 原文中, ...

  6. 【学习笔记】深入理解js原型和闭包(15)——闭包

    前面提到的上下文环境和作用域的知识,除了了解这些知识之外,还是理解闭包的基础. 至于“闭包”这个词的概念的文字描述,确实不好解释,我看过很多遍,但是现在还是记不住. 但是你只需要知道应用的两种情况即可 ...

  7. 【学习笔记】深入理解js原型和闭包(14)——从【自由变量】到【作用域链】

    先解释一下什么是“自由变量”. 在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量.如下图 如上程序中,在调用fn()函数时,函数体中第6 ...

  8. 【学习笔记】深入理解js原型和闭包(13)——【作用域】和【上下文环境】

    上文简单介绍了作用域,本文把作用域和上下文环境结合起来说一下,会理解的更深一些. 如上图,我们在上文中已经介绍了,除了全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了.而不 ...

  9. 【学习笔记】深入理解js原型和闭包(12)——简介【作用域】

    提到作用域,有一句话大家(有js开发经验者)可能比较熟悉:“javascript没有块级作用域”.所谓“块”,就是大括号“{}”中间的语句.例如if语句: 再比如for语句: 所以,我们在编写代码的时 ...

随机推荐

  1. flask框架-decorator装饰器

    调用包: from functools import wraps 装饰器其实就是一个函数:参数是一个函数,返回值是一个函数 1.装饰器使用是通过@符号,在函数的上面 2.装饰器中定义的函数,要使用*a ...

  2. 在Laravel中使用swoole来取代nginx作为http服务器

    1.是什么限制Laravel框架的速度? Laravel框架启动的时候需要加载很多文件,再加上其出了名的生态环境好,所以在开发过程中我们就会发现有非常多的已经造好的轮子,这也就使得Laravel的一次 ...

  3. @Autowired注解在抽象类中实效的原因分析

    最近在工作中遇到这个问题,在抽象类中使用Autowired这个注解,注入mybatis的dao时,总是出现空指针异常,通过日志的打印,发现是这个dao注入失败为空.然后通过new出spring上下文对 ...

  4. jsp页面制作弹出框

    各种弹出页面的设计 [1.普通的弹出窗口] 其实代码非常简单: <SCRIPT LANGUAGE=javascript> <!-- window.open ('page.html') ...

  5. CentOS中安装配置Nginx

    一.安装Nginx '首先我们需要在nginx官网中下载nginx安装包,在这就下载最新版 nginx-1.13.7版本 下载完成以后我们进入下载页面进行查看 下载文件目录为 home/userNam ...

  6. DotNetCore跨平台~System.DrawingCore部署Linux需要注意的

    回到目录 你在windows上使用图像组件没有任务问题,但部署到linux之后,将注意以下几点: 安装nuget包ZKWeb.System.Drawing 项目里还是引用System.DrawingC ...

  7. 【JMeter】if语句中不能Failure=false解决办法

    错误写法: if(roomId.matches("regEx")) Failure=false; else{ Failure=true; FailureMessage=" ...

  8. SSH框架完全整合

    大三学期渐末,事情也挺多的,上周就开始着手整合SSH框架,到现在才真正的完成,过程中碰到了许多小问题(小问题大折腾,哭脸.jpg).本着善始善终的原则,最终把它给完成了. 本篇文章就在: win7 6 ...

  9. 清北学堂 NOIP2017模拟赛 越赛越心塞

    连续考了一个星期发现自己真的是手感型选手,成绩全靠天意.手感好了码出200+也没什么问题,推出式子并且打出自己都不信的操作也有过.手感差了......就一个呵呵二字. 然后开始是T总让我们休息了一个星 ...

  10. 模板引擎(smarty)知识点总结

    首先我们必须知道使用smarty的流程   1.引入   2.实例化   3.配置 模板目录  编译目录  3.0版本 支持不存在的目录则新建   4.赋值   5.编译显示 某个模板文件(暗示需要哪 ...