06前端面试题-原型链

122 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情

一、创建对象的方法

(一)方法一:对象字面量

  • 下图中的两种方法是等价的 image.png

(二)方法二:构造函数

  • 任何一个函数只要被new使用了,这个函数就可以叫做构造函数 image.png

(三)方法三:Object.create

image.png

二、原型、构造函数、实例、原型链

  • 函数才有prototype属性,实例对象没有
  • 只有实例对象才有__proto__属性
  • 这部分更加详细的内容可以查看这篇文章:10Js面试题-原型和原型链

image.png

三、instanceof的原理

  • instanceof运算符判断的是实例的__proto__属性是否与其构造函数的prototype属性相同(引用同一个地址),而且在判断的过程中,会沿着原型链一级一级向上查找(查找原型的构造函数的prototype属性),直到找到返回true或者找到原型链最上面,即null,没找到返回false

  • 例如在下面的代码中,o3.incentecof Object返回true,因为o3对象的__proto__属性等于o3的构造函数M的prototyoe属性,而M的prototyoe属性是Object对象的一个实例,则它的__proto属性就等于Object.prototype。因此,在instenceof顺着原型链查找是会找到Object.prototype,则最后返回true

image.png

  • 使用instanceof时,只要是在原型链上的构造函数就会返回true,如果要判断是否是某个实例对象构造函数就要使用constructor属性,即判断该对象的__proto__属性的constructor属性与某构造函数是否相等。实例如下图:

image.png image.png

四、new运算符

image.png