class A {}
A.prototype.a = 1;
function B(){}
B.prototype = Object.create(A.prototype);
// 上一条语句和下面一行的语句在instanceof中没有区别,上面那个语法可以防止修改到A.prototype
// B.prototype = A.prototype;
B instanceof A; // false
var b = new B();
b instanceof A // true
原型链的解释
要了解原型链必须了解以下3个东西
- 构造函数(this值会被实例所继承);构造函数就上function
- 构造函数的原型(就是构造函数的prototype属性)
- 实例(在查找属性和方法时,会首先在自身上寻找,也就是在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} 是当前函数本身,它也可以重新指定