浅显易懂解释JavaScript原型链

当你初学编程的时候,一定遇到过“面向对象”这个名词。查遍网络,总结下来它就是一个潮词儿:把数据装进带有属性的对象。

面向对象的关键词就是类,你使用constructor和几个私有和公有函数创建类。

一直到ES2015以前,js这门语言并没有实行类。而是使用原型链。而新的ES6“class”,其实只是一个语法糖---它的内部工作的其实仍旧是原型链。

究竟什么是原型链?一切没有例子的编程理论都是耍流氓,请看例证:

第一步,创建constructor

function Bat(name){
 this.name = name;
}

let bob = new Bat('bob');
复制代码

第二步,赋值

每一个初始化的constructor都会有一个prototype对象作为它的属性。我们可以给它设置key 和value

Bat.prototype.fly = function(){
  console.log('Im flying. Weeee');
};

Bat.prototype.detect = function(){
  console.log('I found a mouse!');
};
复制代码

第三步,打印bob查看

此时,你可以看到bob里面是一个Bat对象,而对象的__proto__ 多了detect和fly函数。我们给这个类加了两个方法,但并没有去修改类的原始定义。这就是原型链的继承性。

第四步,验证。

当我们输出bob.name时,得到的是‘bob’;当我们输出bob.fly()时,得到的是Im flying. Weeee’。 那么问题来了,为什么我们没有调bob.prototype.fly()就能得到fly()呢?

这就是原型链的一个特性了:js引擎会首先查找本身对象,如果没有,就去找第一个原型,然后下一个...然后下一个...直到找到为止或者直到碰到null

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值