1. class A {}
  2. A.prototype.a = 1;
  3. function B(){}
  4. B.prototype = Object.create(A.prototype);
  5. // 上一条语句和下面一行的语句在instanceof中没有区别,上面那个语法可以防止修改到A.prototype
  6. // B.prototype = A.prototype;
  7. B instanceof A; // false
  8. var b = new B();
  9. b instanceof A // true

原型链的解释

要了解原型链必须了解以下3个东西

  1. 构造函数(this值会被实例所继承);构造函数就上function
  2. 构造函数的原型(就是构造函数的prototype属性)
  3. 实例(在查找属性和方法时,会首先在自身上寻找,也就是在this中寻找,然后再到构造函数的原型上进行查找,然后逐级向上查找一直找到null为止);这个链式的结构,称之为原型链
  • 实例. _proto属性可以指向,构造函数的原型,但是这个属性并非上JS的标准属性,可以通过_Object.getPrototypeOf(target);获取到这个实例的构造函数的原型

constructor属性

所有对象都会从它的原型上继承一个 constructor 属性;
默认返回一个constructor对象(类型为function),可以被重新指定,
默认constructor.prototype === proto === Object.getPrototypeOf(function);
在function没有指定constructor的情况下,constructor不会显示的出现,(Reflect.ownKeys(GeneratorFunctionPrototype)) 不会返回

prototype属性

只有构造函数才有prototype属性
默认是一个对象
{constructor:f} 是当前函数本身,它也可以重新指定