显式原型和隐式原型:
● prototype是原型对象(显式原型)
● __ proto__是对象原型(隐式原型)
我自己的理解他么区分是:一个开辟的空间的对象(prototype)是具现的为显式, 一个是指针(__ proto__ )只起牵引作用为隐式
代码体验:
var person = {}
person.name = '安'
person.age = 23
console.log(person.__ proto__ === Object.prototype) // true
发现问题: person.__ proto__指向Object.prototype, 所以__ proto__属性是起指针作用
图解:
拓展理解:
● 构造函数才有prototype(原型对象)
● 有prototype的才是构造函数,所以箭头函数不能用来当构造函数
● Object是最大的父类, 下面有很多子类(Function,Array,String…)
● class可以理解成一个Function,它的底层就是Function.prototype挂载,详细点的话可以看手写一个class相关文章
提问:
- Foo.prototype = {name:“安”,age:23} new Foo()实例的__ proto__还是指向Function吗?
解:
- 什么是原型链?(面试题)
思路:
● 原型对象和对象原型是什么
● 举一个原型链的例子
解:
a. prototype是原型对象(显式原型);__ proto__是对象原型(隐式原型)。
b. 举个简单的例子普通的function的原型链
■ function.prototype 的 __ proto __ 指向 Function.prototype
■ Function.prototype 的 __ proto __ 指向 Object.prototype
■ Object.prototype 的 __ proto __ 最终指向指向 null
这边有qq群号欢迎交流: 623354172