JavaScript中继承是通过原型链来体现的。

function Foo(){}

var f1=new Foo();

f1.a=10;

Foo.prototype.a=100;

Foo.prototype.b=200;

console.log(f1.a);//10

console.log(f1.b);//200

f1是Foo函数new出来的对象,f1.a是f1对象的基本属性,f1.b是怎么来的呢?——从Foo.prototype得来,因为f1.__proto__指向的是Foo.prototype。

访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链。

那么问题来了,在实际应用中如何区分一个属性到底是基本的还是从原型中找到的呢?hasOwnProperty,特别是在for…in…循环中,一定要注意。

function Foo(){}                                               function Foo(){}

var f1=new Foo();                var f1=new Foo();

f1.a=10;                     f1.a=10;

Foo.prototype.a=100;                                        Foo.prototype.a=100;

Foo.prototype.b=200;                                       Foo.prototype.b=200;

var item;                    var item;

for(item in f1){                                               for(item in f1){

  console.log(item);//a b                                    if(f1.hasOwnProperty(item)){

}                                                                             console.log(item);//a

                             }

                          }

但是f1的这个hasOwnProperty方法是从哪里来的, f1本身没有,Foo.prototype中也没有,哪儿来的?它是从Object.prototype中来的。

对象的原型链是沿着__proto__这条线走的,因此在查找f1.hasOwnProperty属性时,就会顺着原型链最终找到Object.prototype。当然也可以自定义函数和对象来实现自己的继承。

说一个函数的例子。我们知道每个函数都有call,apply方法,都有length,arguments,caller等属性。为什么每个函数都有?这肯定是“继承”的。函数由Function函数创建,因此继承的Function.prototype中的方法。

那怎么还有hasOwnProperty呢?——那是Function.prototype继承自Object.prototype的方法。

最新文章

  1. 自己动手写ORM框架
  2. 【原创】.NET读写Excel工具Spire.Xls使用(5)重量级的Excel图表功能
  3. iOS注册collcetionViewFlowLayout
  4. 支持取消操作和暂停操作的Backgroundworker
  5. POJ1523 SPF
  6. java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
  7. SQLSERVER的兼容级别
  8. Html,Css,Javascript及其他的注释方法详解
  9. gradle使用小记
  10. ListView使用自定义适配器的情况下实现适配器的文本和图标控件点击事件执行Activity界面中的方法
  11. 解决ListView滑动时卡的问题,实现异步加载图片解决
  12. Hibernate从入门到精通(九)一对多双向关联映射
  13. SQL Server中时间段查询和数据类型转换
  14. 聊聊动画引擎 pop
  15. 使用oracle的SQL Developer创建用户的方法
  16. HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境
  17. Java web 基础
  18. 通过cmd命令到ftp上下载文件
  19. Android:如何实现更换主题
  20. HTML标签元素分类(HTML基础知识)

热门文章

  1. GridView 控件中如何绑定 CheckBoxList
  2. tar
  3. selenium加载时间过长
  4. 完成一段简单的Python程序,使用函数实现用来判断输入数是偶数还是奇数
  5. knockout 学习实例6 attr
  6. php接口和抽象类
  7. python Requests库在处理response时的一些陷阱
  8. Android学习笔记(八)
  9. SQL Server 2008 数据库镜像部署实例之一 数据库准备
  10. PHP上传大文件 分割文件上传