我原以为我懂了的原型
之前我是做Java开发的,当我刚开始接触JS的时候,我还不晓得ES6,所以我也不知道ES6的class,然后我就凭自己的猜测去理解prototype,看了很多CSDN文章,似懂非懂地去面试,去笔试,竟然也过了。
前几天,有个面试官问我prototype什么,我说prototype不就是构造函数么?面试官又问:那你觉得constructor是什么?我回答那不就是ES6语法的构造函数嘛!
然后我记下这个问题,我想面试官可能是觉得我回答的很离谱才反问我的,我当时竟然回答得那么理直气壮——害,真是莫名的自信
想想这么多年来,我学习全都是靠猜,包括大学的高数问题,也是通过答案去猜原理,竟然还能辅导别人。不过,我认为这快速学习的一种方法,只不过,会让人误入歧途。
===========================================丑陋的分割线=======================================================
因为自定义函数的prototype指向其原型对象(原型对象就是class关键字声明的那个对象,JS 的class和Java的Class意思差不多。Java的Class里有构造函数,JS 的class里也有constructor。)——①式
又因为实例化的对象的_proto_属性是指向构造函数的原型对象——②式
又因为构造函数就是自定义函数,自定义函数就是构造函数——③式
所以自定义函数的prototype与实例对象的_proto_指向一致——④式
Person.prototype === person._proto_
两者值相等,只是他们指向的地址一样
网上有言:person._proto_指向Person.prototype,感觉这表述不正确,只是两者指向一致
注意点:
Function的原型是‘function’类型哦
typeof Function.prototype === 'function'; // true