代码改变世界

JavaScript 原型链学习总结

2010-10-27 11:04  毛狮子  阅读(412)  评论(0编辑  收藏  举报

"在JavaScript中,“一切都是对像,函数是第一型

FunctionObject都是函数的实例

Function的父原型指向到Function的原型Function原型父原型Object的原型

Object的父原型也指向到Function的原型"

一个实例的对像,它的默认的父原型为其构造函数显示原型

[每个对像都有一个隐慝的属性用于指向到它的父对像(构造对像的函数)的原型(这里称为父原型隐式原型)。因为原型也是对像,所以原型也有父原型,Object的原型是所有父原型的顶层(原型),这样就形成了所谓原型链]

"Object 是对象的祖先
Function 是函数的祖先
函数可以做构造器
对象是函数new出来的
构造器的prototype是对象
对象的__proto__指向构造器的prototype"

对像属性访问原则

  当从一个对像那里读取属性时,如果对像自身属性列表中不存在这样的属性,就会去自己关联的父原型对像那里寻找,如果父原型对像属性列表中也没有这样的属性则会这个父原型的父原型那里查找,直到找到或直到对顶层原型[Object.prototype]对像属性列表的查找完毕

调用对象的方法跟访问属性搜索过程一样,因为方法的函数对象就是对象的一个属性值。

实例:

Object.prototype.m1 = function(){
    alert("我是狮子");
}
function Class1(str){
    this.p1    =    str;
}
function Class2(){}
Class2.prototype.m1    =    function(){
    alert("你好");
}
var n1    =    new Class1("毛狮子");
//@__proto__属性是对像父原型的引用
//@Object.prototype.__proto__=null
/*
    n1的原型链
    n1.__proto__=Class1.prototype
    Class1.prototype.__proto__=Object.prototype
    
*/
var n2    =    new Class2();
/*
    n2的原型链
    n2.__proto__=Class2.prototype
    Class2.prototype.__proto__=Object.prototype
*/
n1.m1();//===Object.prototype.m1();
n2.m1();//===Class2.prototype.m1();
alert(n1.p1);//毛狮子
alert(n2.p1);//undefined