编辑代码

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
function myNew(fn, ...argu) {
    const obj = {}
    obj.__proto__ = fn.prototype
    // 改变构造函数this,指为实例对象
    let result = fn.call(obj, ...argu)
    //如果构造函数的执行结果返回的是一个对象或者Functiion返回Result
    if(typeof result == 'object' || typeof result == 'function') {
        return result
    }
    return obj
}

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function() {
  console.log(this.age);
};
let p1 = myNew(Person, "lihua", 18);
console.log(p1.name);
console.log(p1);
p1.say();

// Call的用法
let obj = {
    a: 1
}
function fn(name, age) {
    console.log(this.a)
    console.log(name)
    console.log(age)
}
fn.call(obj, '周斌', 19)