原型和原型链是为了解决继承这个问题,大家都知道js中没有跟其他语言一样面向对象编程。长写JavaScript对类的哪一块的知识不太感冒。
我们下面用后端的思维去看这个原型和原型链
结果:
human run
human sleep
human cry!
Animal { type: 'human', run: [Function (anonymous)] }
{ eat: [Function (anonymous)], sleep: [Function (anonymous)] }
上面的js代码中,我们可以看见
Animal调用run时:在自己的方法中找到run方法并执行
Animal调用sleep时:自己是没有该方法的,就会去__proto__属性中找,此时的__proto__:Animal.prototype。找到了Animal中的sleep方法,则直接调用。
Animal调用cry时:自身没找到,__proto__没找到,所以在Animal的__proto__去找,然后找到直接调用。
这个其实就是把父类的属性放在自己的__proto__属性中,调用方法属性时,没找到则一直往__proto__中的对象去找,直到找到null为止。
这个过程也被称为原型链