abruzzi 发表于 2013-1-29 09:16:49

JavaScript内核系列 第10章 深入核心概念

 
第十章核心概念深入

在前半部分章节中,涉及到一些重要的概念,在当时章节上下文中,限于内容,没有展开讨论,这些内容可能较难理解,因此都集中在这个章节进行讨论。具体涉及到的内容有原型链,执行期上下文,活动对象,作用域链以及this值。这部分内容可以结合之前章节中相关部分一起参考。
10.1原型链

10.1.1原型对象与原型链

正如第三章提到的,JavaScript对象是一个属性的集合,另外有一个隐式的对象:原型对象。原型的值可以是一个对象或者null。一般的引擎实现中,JS对象会包含若干个隐藏属性,对象的原型由这些隐藏属性之一引用,我们在本文中讨论时,将假定这个属性的名称为"__proto__"(事实上,SpiderMonkey内部正是使用了这个名称,但是规范中并未做要求,因此这个名称依赖于实现)。
由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自己的原型,这样就组成了一条链,这个链就是原型链。
JavaScritp引擎在访问对象的属性时,如果在对象本身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则返回undefined.原型链一般实现为一个链表,这样就可以按照一定的顺序来查找。
 
结合下边的例子:
 

var base = {    name : "base",    getInfo : function(){       return this.name;    }} var ext1 = {    id : 0,    __proto__ : base} var ext2 = {    id : 9,    __proto__ : base} print(ext1.id);print(ext1.getInfo());print(ext2.id);print(ext2.getInfo());  
 
可以得到:
 

<div class="quote_div">0
base
9
base
页: [1]
查看完整版本: JavaScript内核系列 第10章 深入核心概念