前言
我们都知道,通过 new 一个构造函数,我们就得到一个类的实例,通过这个实例,可以调用构造函数的属性,方法等等。那么,这里面发生了什么呢?要理解这篇文章,需要先了解原型链的原理(原型链)。
new一个构造函数的过程
(1)建立一个空对象。
(2)将空对象的原型指向构造函数的原型对象。
(3)将空对象的上下文与构造函数绑定。
自定义一个new方法
function myNew(constructor, ...arguments) {
var obj = {};
obj._proto__ = constructor.prototype;
const res = constructor.apply(obj, arguments);
// 如果返回的不是对象,只能返回空对象了
return (typeof res === 'object') ? res : obj;
}
function Chinese(name) {
this.name = name;
}
var jack = myNew(Chinese, 'jack');
console.log(jack.name); // output : jack