如以下构造函数,使用new关键字:
function One(name, age) {
this.name = name;
this.age = age;
}
let a = new One();
console.log(a);
手写new,分四步骤,直接贴代码:
//Fun为构造函数, args表示传参
function myNew(Fun, ...args) {
// 1.在内存中创建一个新对象
let obj = {};
// 2.把新对象的原型指针指向构造函数的原型属性
obj.__proto__ = Fun.prototype;
// 3.改变this指向,并且执行构造函数内部的代码(传参)
let res = Fun.apply(obj, args);
// 4.判断函数执行结果的类型
if (res instanceof Object) {
return res;
} else {
return obj;
}
}
let obj = myNew(One, "XiaoMing", "18");
console.log("newObj:", obj);