JS(JavaScript)中的原型和原型链总结———例题详解(附源码)

何为原型及原型链?

什么是原型?
在JS中每个构造器(函数)都一个属性叫prototype,它叫原型,也是个对象,我们叫这个对象为原型对象;而每个对象中有一个属性叫__proto__,它叫隐式原型


什么是原型链?
是一个对象的查找机制,比如查找对象arr中的toString方法,会先在自己的私有属性中找,如果没有,就沿着__proto__去原型对象中找,如果还没有,就继续沿着__proto__去它原型对象中的原型对象中找,直到找到Object中的原型对象(Object原型对象中的__proto__指向null),如果还没找到,那么结果就是undefined;
什么是作用域链?
和原型链如出一辙,是一个EC(执行上下文)中数据的查找机制,现在自己EC中找数据,如果没有就去父函数所对应的上下文中找,如果还没有,就去父函数的父函数的EC中找,知道找到EC(G),如果还是没有,那么就报错;

  • 下图为原型与原型对象的详细分析图
    原型与原型对象
  • 原型练习题1(详细过程)
    原型练习题1
  • 代码执行过程详解;
    80行代码先创建一个Fn构造器; 84行代码,对Fn的原型对象增加一个方法say(是一个函数);
    87行代码创建一个新的Fn的原型对象,此时Fn构造器prototype将指向新的原型对象;
    88行代码,new了一个新的对象f1,有自己的私有属性a=1; 89行代码,给新的原型对象增加一个b方法(也是一个函数);
    92行代码,打印出f1.a,就是打印出f1对象中的a变量,f1对象有a为1,就打印出来1;
    93行代码,执行f1.say()函数,先在对象f1中找say函数,没有,然后沿着__proto__去它的原型对象中找如果还没有就一直沿着__proto__往上一级的原型对象中找,此时在Fn构造器原来的原型对象中找到say函数,此时执行say函数,say函数中的this指向f1对象中的a变量,函数执行后,f1对象中的a变量变为2;
    94行代码,打印出f1.a,为2;
    95行代码,执行f1.b()函数,先在对象f1中找b函数,没有,然后沿着__proto__去它的原型对象中找如果还没有就一直沿着__proto__往上一级的原型对象中找&#
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值