你真的了解 prototype 和proto吗
一句话的图解:实例对象的隐式原型指向构造函数的的原型对象
什么是 prototype
javascript 只有函数默认拥有 prototype 属性,由构造函数构造出来的实例默认是不具有扩展的,除非手动给这个实例加上扩展(当然这已经不是 prototype 了,仅是一个名叫 prototype 的属性而已)。
在 JS 里,万物皆对象。方法(Function)是一个对象,方法的原型(Function.prototype)是对象。
prototype 是一个拥有 [[Construct]] 内部方法的对象才有的属性。
例如函数,对象的方法,ES6 中的类。注意 ES6 中的箭头函数没有 [[Construct]] 方法,因此没有 prototype 这个属性,除非你为它添加一个。
什么是proto
- proto就是连接两个实例与原型之间的桥梁,就是我们通常所说的原型链,proto指向构造函数的 prototype 。proto的作用是创建一个原型链,要通过proto,你才能不断的找到所谓的父原型。
- 每个对象都有一个proto属性
什么是原型链
- JavaScript 可以通过 prototype 和proto在两个对象之间创建一个关联,使得一个对象就可以通过委托访问另一个对象的属性和函数。
- 这样的一个关联就是原型链,一个由对象组成的有限对象链,用于实现继承和共享属性。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿乐去买菜!
评论