js的new运算符

111 阅读1分钟
        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);