对JS函数中的原型、原型链、继承的理解

150 阅读2分钟

ECMAScript中无法实现接口继承.ECMAScript只支持实现继承,而且其 实现继承 主要是依靠原型链来实现的.

概念梳理

  • 构造函数是什么

构造函数与一般函数的区别在于构造函数是用于创建实例对象来使用的,所以构造函数一般都是带有new运算符的函数。构造函数有着所有函数都有的属性:prototype。构造函数的prototype属性指向原型对象。

  • 实例是什么

实例对象可以通过构造函数创建。实例对象本身就有着__proto__属性,实例对象的__proto__属性指向原型对象。。

var M = function () {
    this.name = 'Jane'
} 
var obj = new M()
  • 原型是什么

原型对象是由构造函数的prototype属性和这个构造函数创建的实例对象的__proto__属性共同指向的一个原型链上的对象。如果要判断一个构造函数与实例对象是否有着共同指向的原型对象,可以使用instanceof 来判断,具体用法是 实例对象 instanceof 构造函数。比如引用上面构造函数创建实例对象的例子:obj2 instanceof people,结果返回true。

  • 原型链是什么

指从一个实例对象开始往上找,这个实例对象的__proto__属性所指向的则是这个实例对象的原型对象,如果用obj表示这个实例,则原型对象表示为obj.proto。同时,这个原型对象顾名思义也是一个对象,而且它也有上一级的原型对象,相对于上一级原型对象而言,它也是一个实例对象,那么它也拥有__proto__属性,它的__proto__属性也指向它的原型对象,后面也以此类推,一直到Object.prototype这个原型为止,这就是整个原型链。Object.prototype为原型链的末尾点。