任何一个对象都有一个prototype的属性,在js中可以把它记为:__proto__
 

当初ECMAscript的发明者为了简化这门语言,同时又保持继承的属性,于是就设计了这个链表。。
在数据结构中学过链表不,链表中有一个位置相当于指针,指向下一个结构体。

于是乎__proto__也一样,每当你去定义一个prototype的时候,相当于把该实例的__proto__指向一个结构体,那么这个被指向结构体就称为该实例的原型。

文字说起来有点儿绕,看图说话

代码如下:
var foo = {
x: 10,
y: 20
};


当我不指定__proto__的时候,foo也会预留一个这样的属性,

如果有明确的指向,那么这个链表就链起来啦。

很明显,下图中b和c共享a的属性和方法,同时又有自己的私有属性。

__proto__默认的也有指向。它指向的是最高级的object.prototype,而object.prototype的__proto__为空。

代码如下:
var a = {
x: 10,
calculate: function (z) {
return this.x + this.y + z
}
};
var b = {
y: 20,
__proto__: a
};

var c = {
y: 30,
__proto__: a
};

// call the inherited method
b.calculate(30); // 60


理解了__proto__这个属性链接指针的本质。。再来理解constructor。

当定义一个prototype的时候,会构造一个原形对象,这个原型对象存储于构造这个prototype的函数的原形方法之中.

代码如下:
function Foo(y){
this.y = y ;
}

Foo.prototype.x = 10;   //Foo.prototype也是个对象,这个对象存储在Foo()构造函数的prototype方法中

Foo.prototype.calculate = function(z){
return this.x+this.y+z;
};

var b = new Foo(20);

alert(b.calculate(30));

最新文章

  1. mysql null值处理详细说明
  2. 常用PHP函数类目录
  3. 数据库是.frm,.myd,myi备份如何导入mysql (转)
  4. ASP.NET MVC5--Contains
  5. Asp.Net远程调试
  6. 在jsp页面解析json的2种方法
  7. iOS开发HTTPS实现之信任SSL证书和自签名证书
  8. BUG修改纪录
  9. windows 下安装elasticsearch
  10. LAMP介绍及安装
  11. Java中的值栈
  12. java的hashcode(结合hashset讲解)
  13. BZOJ3730震波——动态点分治+线段树(点分树套线段树)
  14. 修改css的(屏蔽)overflow: hidden;实现浏览器能把网页全图保存成图片
  15. IDEA中设置Tab多行显示、打开过多自动关闭的方法
  16. 如何删除Sitecore CMS中的项目
  17. Android的WebView控件载入网页显示速度慢的究极解决方案
  18. cas单点登陆系统-casServer搭建
  19. (18)python 打包发布
  20. Unity3D学习笔记——组件之Effects(效果/特效)——Particle System(粒子系统)

热门文章

  1. Quartz之CronExpression
  2. C语言中的getchar和putchar详解
  3. SharePoint 2013 Nintex Workflow 工作流帮助(十)
  4. C# 调用配置文件SQL语句 真2B!
  5. Android开发-略讲adb命令和SQLite数据库运用
  6. 嵌套遍历<s:iterator>map=new TreeMap(string,Map(string,User))
  7. ThinkPHP查询数据与CURD
  8. Java基础毕向东day05 对象与对象的区别,匿名内部类,函数的执行流程。
  9. Airbase-ng帮助
  10. Mac commands