先铺垫下原型规则:

1.所有的引用类型(数组,对象,函数)都具有对象特性,可自由扩展属性(出了null外)

2.所有的引用类型(数组,对象,函数)都有一个__proto__属性(隐式原型),属性值是一个对象

3.所有的函数都有一个prototype属性(显示原型),属性值是一个对象

4.所有的引用类型(数组,对象,函数),__protot__属性值指向他的构造函数的prototype属性值(new出来对象自身的(__protot__)隐式原型就是他构造函数的(prototype)显示原型)

5.当试图去得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去他的__proto__(即他的构造函数的prototype)中寻找

看例子:

例子中new出来的f对象是只有name属性(第3行创建的)和printName方法(第10行创建的),第15行中调用f.alertName.而alertName直接在f对象本身中是没有的,那么会去他的__proto__(即他的构造函数Foo的prototype)中寻找(在第5行)

这就引出了原型链

当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,
如果没有则会去原型对象中寻找,一直往上找(像冒泡一样),浏览器防止无限循环,找到最上层就是object了(祖先),再往上找就是null

拓展:

使用hasOwnProperty()方法来检查该属性是new出实例对象自身中含有的还是在原型中含有的,当对象自身中含有属性时,会返回true,

对比in,使用in检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true,所以hasOwnProperty()更严格,

最新文章

  1. NodeJs之调试
  2. mysql自动加入添加时间列
  3. 深入理解css系列:清除浮动
  4. 2x2矩阵相乘模版
  5. android网络编程--从网络下载图片,并保存到内存卡
  6. Windows10输入法的切换
  7. IOS 高级开发 KVC(一)
  8. nginx+vaadin配置
  9. SSIS: 把存储在数据库中的图片导出来
  10. C#文件流写入方法
  11. swift 手势之UIPanGestureRecognizer
  12. 搭建phabricator代码审核工具
  13. cobbler安装配置.基本全了多看help和docs
  14. git报错:'fatal:remote origin already exists'怎么处理?附上git常用操作以及说明。
  15. win8以上系统查看iis网站进程内存占用情况
  16. Web前端知识点记录
  17. mkdosfs 安装
  18. Javascript高级编程学习笔记(31)—— BOM(5)screen、history对象
  19. 【Python3练习题 013】 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字
  20. 码云IntelliJ IDEA

热门文章

  1. IDEA2019.2中文字体变粗缺字等问题
  2. merge同时包含增、改、删
  3. linux下node.js 查版本号和更新 how to update node
  4. [Bayes] Concept Search and LSI
  5. EasyNVR智能云终端硬件盒子x86版自我维护之摄像机网页直播系统基础运维
  6. [LeetCode] 243. Shortest Word Distance 最短单词距离
  7. test String.split
  8. Spring boot后台搭建二为Shiro权限控制添加缓存
  9. C# 编译器 和 反编译器,你要哪个(歪头)? 我全都要(捏拳)!
  10. ATSC/DVB/ISDB三大标准比较