每天一个面试点!

120 阅读1分钟

一、 new 做了哪些事

1、创建了一个空对象

2、this指向这个对象

3、给这个空对象赋值

4、返回这个对象,

下面请看例子:

function Person(name, age){
    this.name = name;
    this.age = age;
}
Person.prototype.sayName = function () {
    console.log(this.name)
}
const person1 = new Person('Tom', 20)
console.log(person1)  // Person {name: "Tom", age: 20}
t.sayName() // 'Tom'

从上面可以看出:

  • new 通过构造函数 Person 创建出来的实例可以访问到构造函数中的属性
  • new 通过构造函数 Person 创建出来的实例可以访问到构造函数原型链中的属性(即实例与构造函数通过原型链连接了起来)

好,这个时候问题就来了? 我可不可以自己返回一个值呢?

可以!但是如果你想使用你返回出来的值那么这个值就必须是一个引用类型的值,因为值类型的值他不会被 return 返回出来

下面请看代码:

值类型 并不可以 返出来哦

function Test(name) {
  this.name = name
  return 1
}
const t = new Test('xxx')
console.log(t.name) // 'xxx'

引用类型 可以返回出来哦

function Test(name) {
  this.name = name
  console.log(this) // Test { name: 'xxx' }
  return { age: 26 }
}
const t = new Test('xxx')
console.log(t) // { age: 26 }
console.log(t.name) // 'undefined'