function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.setName = function (name) {
this.name = name;
};
function isMyNew(fun, ...args) {
// 新建一个空对象
let obj = {};
// 将空对象的隐式原型指向构造函数的显示原型
obj.__proto__ = fun.prototype;
// 调用构造函数,this指向为新建的obj对象并接收返回值
let result = fun.call(obj, ...args);
// 如果返回值为对象则直接返回否则返回新建的obj对象
return result instanceof Object ? result : obj;
}
const p = isMyNew(Person, 'luoxijie', 21);
console.log('访问name和age:');
console.log(p.name, p.age);
p.setName('罗熙杰');
console.log('使用原型链上的setName方法修改name为罗熙杰后访问name和age:');
console.log(p.name, p.age);