个人对"原型"和"原型链"的理解

Javascript语言可能太过灵活,导致一些学C#学Java等姑且说叫"正统的面向对象的语言"的人觉得Javascript面向对象的部分凌乱不堪,上网看别人对原型和原型链的理解都是各抒己见,各有各的道理,自己的一番说辞只要自己能辩证通了,那么倒说的过去,至少自己思考过了...

 说一下我个人对Javascript中"原型"和"原型链"的理解吧,首先:

1.什么是"原型"呢?

脑子里第一反应的是设计模式中的"原型模式",将一个具体的对象作为原型,拷贝出跟他相同的对象,当然还有"深复制"和"浅复制"跟这无关了,不做讨论...OK,那么我们大概的先得出原型实际上是一个"对象",再通过借鉴别人的理解,几乎可以肯定了,"原型"确实是一个"对象",通过这个对象来拷贝得到别的对象...

那么我们通过代码来说事吧

//创建一个Person类,给个默认属性默认值
function myPerson(){this.name="崔永航";};


myPerson.prototype  //这里直接在浏览器Console控制台得到myPerson{ }对象


//我们再实例化一个myPerson对象
var myPer = new myPerson();


myPer.__proto__   //这里也在浏览器Console控制台得到myPerson{ }对象


我们发现myPerson构造器的prototype的属性指向myPerson{ }对象,而myPer.__proto__也指向myPerson{ }对象,他们为什么指向同一个呢?我画了个图如下


实际上我们对象的__proto__属性指向的是构造器或者说是类的prototype属性,而这个类的prototype属性指向谁,那么在构造这个对象的时候就会将被构造对象的__proto__的属性指针指向谁,仅限在实例化时,当对象构造完成之后再去更改构造器的prototype属性指向的对象,仅会对后继的对象产生影响...那么原型实际上就是当前类对象的__proto__属性指向的构造器的prototype属性所指向的对象,这个对象一般指向父类...

    2.那么什么是"原型链"呢?

   图中右上角也有说明...子类的__proto__指向构造器的prototype属性指向的对象,然后这个对想的__proto__属性又继续指向他的构造器的prototype属性指向的对象,如此循环,最后指向Object,而Object的原型指向null,原型链结束...


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值