js的原型链个人收获

      最近在看js的原型链,自己也遇到很多问题,也去看了很多关于这些的博客,看的云里雾里。所以也想写篇博客和大家分享下自己的收获和遇到的一些问题。

首先,来说下js的对象:

               Object这是最顶层的对象,我们见到的其他对象都是间接或者直接通过它衍生的。然后在来说说我们应用比较多的Function对象,通过new Function()创建的都是函数对象,这也是我们接触算是比较多的对象。所有的函数都有prototype属性,当然这仅仅限于函数。其他想Date,Math等等,都算比上面2个等级要低。

                然后再来看原型对象,它具有prototype属性,当我们定义函数的时候,他就会被创建。在js中基本每个对象都可以被继承,而原型对象就是其中不可缺少的一环。原型对象是包含特定类型的所有实例共享的属性和方法,这也就代表着可以让所有实例对象共享它包含的属性和方法。

               

function person(){};  
  
console.log(typeof person.prototype) //=> Object  
console.log(typeof Object.prototype) //=> Object  
console.log(typeof Function.prototype) // 特殊 Function  
console.log(typeof Function.prototype.prototype) //undefined 函数对象却没有prototype属性 

  这里有个特殊例子(Function.prototype是个例外,它是原型对象,却又是函数对象,作为一个函数对象,它又没有prototype属性。

v

                当然,原型对象还有constructor属性,这个属性一般是指向构造函数对象的。当我们调用某种方法或者查询某些属性时,首先会在自身查找,如果自身没有,就会进入到它的__proto__属性中调用查找,这个也就是它构造函数的prototype中查找,这样一步步寻找下去,是不是有种链子的感觉了呢?


接下来,说说原型链:

             上面已经说了,__proto__实际上就是一个指针,通俗点说,谁构造了它,他就指向谁的prototype。

var a = new Object()
a.__proto__  == Object.prototype  //true

              以上面为例,a是我们定义的一个object的实例,按照我们所说,是object构造了它,所以我们的a的__proto__将指向object的prototype属性。当我们实际应用a的时候,第一步会在自身寻找方法或者属性,如果未找到,就会进入object的prototype中去寻找。而实际应用中,往往比此例复杂的多,而几乎所有的js对象都有__proto__对象。由此可见,___proto__是实现原型链的关键,但prototype也是原型链不可缺少的部分。

             而众所周知,js的继承机制就它只能通过原型链来继承,所以熟悉原型和原型链,会给我们在js的道路上带来很大帮助。最后附上一张图:


希望可以帮助到大家,欢迎大家指正错误,本人是第一次写博客,也是一个小白,欢迎大家交流。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值