手动修改构造函数创建对象时return 返回值对实例对象的归属问题的影响

145 阅读1分钟

前景介绍: 问题来自很早以前的一个面试题,修改构造函数return 的数据,这个构造函数的结果是什么?

//1.初始状态
function Person(obj){
    this.name = obj.name;
    this.age  = obj.age;
}
let person = new Person({
    name:"肖战",
    age :"30",
})
console.log(person);// Person { name: '肖战', age: 30 }
 
//2.修改return的值
function Person(obj){
    this.name = obj.name;
    this.age  = obj.age;
    return {
        name:"xiaobai"
    }
}
let person = new Person({
    name:"肖战",
    age :"30",
})
console.log(person);// Person { name: '肖战', age: 30 }
所有情况的总结在下图中,如果没有显示修改return的值,或者是return 的是简单出具类型和null的情况,返回的都是构造函数本身,如果返回的是复杂数据类型,数组/函数/对象,那该构造函数创建的实例对象就是return 的值 

image.png