- 新建一个对象obj
- 把obj的和构造函数通过原型链连接起来
- 将构造函数的this指向obj
- 如果该函数没有返回对象,则返回this
// 实现一个new
/*
@params:
Func: 操作的那个类
args: 参数
*/
function _new(Func, ...args) {
// 创建一个空对象
let obj = {};
obj.__proto__ = Func.prototype;
// const obj = Object.create(func.prototype)
// 绑定this值(让Func中的this指向obj,并执行Func的函数体。)
let result = Func.call(obj, ...args);
// 判断result的类型,如果无返回值 或者 返回一个非对象值,则将 obj 作为新对象返回;否则会将 result 作为新对象返回。
if (
(result != null && typeof result === "object") ||
typeof result === "function"
) {
return result;
}
return obj;
}
function Dog(name) {
this.name = name;
}
Dog.prototype.say = function () {
console.log("say");
};
let p = _new(Dog, "三毛");
p.say();
console.log("p", p);