前端面试宝典

请简述原型/原型链/(原型)继承

详细介绍请点击查看

什么是原型?

任何对象实例都有一个原型,也叫原型对象,这个原型对象由对象的内置属性__proto__指向它的构造函数的prototype指向的对象,即任何对象都是由一个构造函数创建的。

什么是原型链?

原型链基本思想是利用原型让一个引用类型继承另外一个引用类型的属性和方法。我们知道,每个构造函数都有一个原型对象,每个原型对象都有一个指向构造函数的指针construct,而实例又包涵一个指向原型对象的内部指针__proto__


原型链的核心就是依赖对象的`__proto__`的指向,当自身不存在的属性时,就会沿着原型链一层层的去扒出创建对象的构造函数,直到`Object`时,就没有`__proto__`指向了。因为`__proto__`实质找的是`prototype`,所以我们只要找到这个链条上的构造函数的`prototype`。其中`Object.prototype`是没有`__proto__`属性的,它==null

什么是原型继承?

原型继承是JS的一种继承方式,原型链作为实现继承的主要方法,其基本思路是利用原型让一个引用类型继承另外一个引用类型的属性和方法。
原型继承:利用原型中的成员可以被和其相关的对象共享这一特性,可以实现继承,这种实现继承的方式,就叫做原型继承。

new 操作符做了哪些事情

new 操作符新建了一个空对象,这个对象原型指向构造函数的prototype,执行构造函数后返回这个对象。

普通函数和构造函数的局别

  1. 构造函数也是一个普通函数,创建方式和普通函数一样,但是构造函数式习惯上首字母大写
  2. 调用方式不一样,普通函数直接调用,构造函数用关键字new来调用
  3. 调用时,构造函数内部会创建一个新对象,就是实例,普通函数不会创建新对象。
  4. 构造函数内部的this指向实例,普通函数内部的this指向调用函数的对象(如果没有对象调用,默认为window对象)
  5. 构造函数的返回值是创建的对象(也即是实例),普通函数的返回值由return语句决定。
  6. 构造函数的函数名与类名相同

什么是面向对象请简述

面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节;
这种思想是将数据作为第一位,这是对数据的一种优化,操作起来更加的方便,简化了过程。

Js的每个函数都有一个prototype属性,prototype指向一个对象,当函数作为构造函数时,prototype就起到类似于class的作用。

面向对象有三个特点:

  • 封装(隐藏对象的属性和实现细节,对外提供公共访问方式)
  • 继承(提高代码的复用性,继承是多态的前提)
  • 多态(是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象)