class 更严格
-
没有变量提升
-
必须用new创建实例
-
原型上的对象不能遍历
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 在构造函数实现
-
创建空对象
-
空对象的 原型链
-
构造函数调用,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;
}