【前端面试小文系列:每日一题2020/12/24】

119 阅读1分钟

面试官:new以下构造函数返回什么?

function Person() {
      this.name = "bar";
      return true; // 此时返回的是一个原始数据类型
 }
 
 let a = new Person();
 console.log(a.name); // bar 或 error ?

到底a是一个对象实例还是一个布尔值?

答案是:a 就是Person的实例 { name: 'bar' },也就是说new Person返回得到是一个Person的实例,Person构造函数内部的return并没有起作用;

再来看一种情况:

function Person() {
      this.name = "bar";
      return { name: 'foo'}; // 此时返回的是一个引用数据类型
 }
 
 let a = new Person();
 console.log(a.name); // foo

由此我们可以得出结论:如果构造函数返回的是js原始数据类型,那么实例得到的就是构造函数new出来的实例,但如果返回的是引用数据类型,那么则会原封不动返回引用类型。