本系列文章是针对前端面试之道网站所做的个人注解。
本文是1.4JS-原型的简化记忆版,为面试问答题的形式,如有不解,请移步原文。
每个函数都有 prototype 属性,除了 Function.prototype.bind()创建的函数,该属性指向该函数的原型对象。原型对象存储了函数的公有属性和方法。让你无需重复声明公有属性。省代码,省内存。每个原型对象都有constructor属性,指向对应的函数。每个对象(实例)都_proto_有属性,指向了创建该对象(实例)的构造函数的原型。_proto_将各个对象连接起来组成了原型链。
原型相关公式:
Object.prototype._proto ===null
Function.proto === Function.prototype(规定)
实例._ proto _===实例的构造函数.prototype===实例的构造函数的原型
X函数的原型.constructor=== X函数
- 问: 你了解原型吗?可以简单介绍一下吗?
答: 原型是一个对象,全称是原型对象,函数的原型对象里包含函数的公有属性和方法。原型对象相当于一个容器,里面装着对应函数要用到的各种方法。
- 问: 如何链接到原型?
答: 函数可以通过函数.prototype找到函数的原型,如果是一个实例对象,就可以通过实例._proto_链接到其构造函数的原型。
- 问: prototype 如何产生的?
答: 有些函数已经内置了prototype属性,比如上文提到的Array。
除了已经内置prototype属性的函数,当我们新声明一个函数时,prototype这个属性也会被自动创建。
- 问: _ proto _ 如何产生的?
答: 当我们使用 new 操作符时, 新对象被添加了 proto 并且链接到构造函数的原型上。
- 问: prototype和_proto_有什么联系和区别?
答: prototype和_proto_都包含指向原型对象的指针,但prototype是一个显示原型属性,只有函数才拥有该属性,_proto_是每个对象都有的隐式原型属性。实例.proto===实例的构造函数.prototype
- 问: 那什么是原型链?
答: 实例可以通过_proto_来逐层寻找上层属性。_proto_将各个对象连接起来组成了原型链。
- 问: 原型链的终点是什么?
答: 原型的终点是Object.prototype._proto // null