以下方法亲测有效
实现new
function _new(fn, ...args) {
//创建一个空对象
let obj = new Object();
obj.__proto__ = fn.prototype; //把obj的__proto__指向fn的prototype,实现继承
let result = fn.apply(obj, args) //改变this的指向
return typeof result === "object" ? result : obj;
}
实现 instanceof
function instance_of(L, R) { //L 表示左边的object,R 表示右边的constructor
const R_P = R.prototype; // 取 R 的显式原型
L = L.__proto__; // 取 L 的隐式原型,并且可能会顺着原型链重新赋值
while (true) {
if (L === null)
return false;
if (R_P === L) // 这里重点:严格比较 true
return true;
L = L.__proto__;
}
}