跳到主要内容

new 一个构造函数,如果函数返回 return {} 、 return null , return 1 , return true 会发生什么情况 ?

参考答案:

在JavaScript中,new关键字用于创建一个用户自定义的对象类型或内建对象的实例。当你使用new关键字调用一个函数时,这个函数就被称为构造函数。构造函数通常返回一个对象,但如果没有显式地返回一个对象,或者返回了一个非对象值,JavaScript会自动返回一个新创建的对象实例。

现在,针对你提到的几种返回情况,我们来一一分析:

  1. return {}: 当构造函数返回一个空对象{}时,这个空对象将成为new操作符的结果。这个新创建的对象不会继承构造函数的原型链上的属性和方法,因为它不是通过Object.create()new Object()创建的,而是一个全新的空对象。

  2. return null: 如果构造函数返回null,那么new操作符的结果将是null。这种情况并不常见,因为通常我们期望构造函数返回一个新创建的对象。返回null意味着构造函数的执行结果实际上没有创建任何新对象。

  3. return 1: 如果构造函数返回了一个非对象值,比如数字1,那么new操作符的结果将是这个非对象值。然而,请注意,在JavaScript中,如果构造函数没有显式地返回任何值(即没有return语句),那么new操作符的结果将是一个新创建的对象实例,这个对象会继承构造函数的原型链上的属性和方法。因此,返回非对象值通常不是一个好的做法,除非你有特殊的理由要这样做。

  4. return true: 类似于返回数字1,如果构造函数返回了一个布尔值true,那么new操作符的结果将是这个布尔值。这同样不是一个常见的做法,因为通常我们期望构造函数返回一个新创建的对象。

总结来说,使用new关键字调用构造函数时,如果构造函数返回一个对象,那么这个对象将成为new操作符的结果。如果构造函数返回一个非对象值,那么这个非对象值将成为new操作符的结果。如果构造函数没有显式地返回任何值,那么new操作符的结果将是一个新创建的对象实例,这个对象会继承构造函数的原型链上的属性和方法。