js一百零一夜之第八夜-javaScript 原型链的理解

1.今天费了九牛二虎之力终于完成了对原型链的学习,不多说了,看看下面的这篇文档,希望会对原型链有一个比较
清楚的认识,好文章还在后面,会继续出新文章的。
 
<script>
//本文开始先说明一下来验证一个重要的东西,好了不多说看代码
var test=function(){
    alert("test");
    }
 
    test.prototype.say=function(){
        alert("I have nothing to say");
        }
//在js 中new 创建对象又是怎么一个过程呢?
//1.首先初始化一个对象 var t ={}
//2.t.__proto__=test.prototype
//3.test.call(t);
//关键在于第二步 验证 t.__proto__=test.prototype
 
var t=new test(); //每个对象在创建以后都会默认的生成的一个__proto__属性,我发现firefor将此属性给暴露出来了
alert(t.__proto__==test.prototype);  // 返回true 验证
 
//下面看一个复杂一点的例子原型链的继承
 
var Person =function(){}
Person.prototype.say=function(){
     alert("I am a Person");
     }
     Person.prototype.salary=100000;
 
var Programer=function(){
      this.writeCode=function(){
          alert("I will't write code until 99");
          }
     }
Programer.prototype=new Person();
//假如在函数外边定义函数属性就没有效果了
Programer.prototype.writeCode=function(){
     alert("I'm writing code every second");
     }
     Programer.salary=1000;
 
     var p=new Programer();
     p.say(); //I am a Person
     alert(p.salary); //1000
     p.writeCode(); //I'm writing code every second
 
//为什么p.say()调用会有效果呢?其中的奥妙就在原型连,而原型链的作用,不在于prototype,而在于另一个属性,下面我们来做推导
//因为 var p=new Programer();
//p.__proto__=Programer.prototype
//又因为 Programer.prototype=new Person();
//so    Programer.prototype.__proto__=Person.prototype
//所以 p.say()=Programer.prototype.__proto__.say()=Person.prototype.say();
 
//所以p.say() 会打印出 I am a Person
//其中起重要作用的是__proto__属性,因为他起到了,一个桥梁的作用
 
最后总结:
1.每个对象在创建后,都会创建一个默认的属性:__proto__   其中     fireFox 将其暴露出来了
2.原型链的实现跟prototype 有着密切的关系,将这关系密切联系起来的是__proto__ 默认属性
3.当创建的对象调用的方法不存在时,此对象沿着原型链向他的上级去找,直到找到为止。
参考文档来自
 
http://kb.cnblogs.com/page/55718/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值