原型链

77 阅读1分钟

原型链参考链接 原型链参考链接2

Class 与 普通构造函数有何区别

class 更严格

  1. 没有变量提升

  2. 必须用new创建实例

  3. 原型上的对象不能遍历

Class 和 构造函数原型链是相同的

function Person(age) {
    this.age = age
}
const p = new Person(14)

原型链: proto 延续

p.__proto__ == Person.prototype

Person.prototype.__proto__ == Object.prototype

Object.prototype.__proto == null

p.constructor 用于记录实例是由哪个构造函数创建

Person 是一个 函数实例对象, 可以定义属性

Person.__proto__ == Function.prototype

Person.say = 'Hello world'

new 在构造函数实现

  1. 创建空对象

  2. 空对象的 原型链

  3. 构造函数调用,this 指向空对象

function myNew(context) {
    const obj = new Object();
    obj.__proto__ = context.prototype;
    const res = context.apply(obj, [...arguments].slice(1));
    return typeof res === "object" ? res : obj;
}