new 一个构造函数,如果函数返回 return {} 、 return null , return 1 , return true 会发生什么情况 ?
在JavaScript中,new
关键字用于创建一个用户自定义的对象类型或内建对象的实例。当你使用new
关键字调用一个函数时,这个函数就被称为构造函数。构造函数通常返回一个对象,但如果没有显式地返回一个对象,或者返回了一个非对象值,JavaScript会自动返回一个新创建的对象实例。
现在,针对你提到的几种返回情况,我们来一一分析:
-
return {}
: 当构造函数返回一个空对象{}
时,这个空对象将成为new
操作符的结果。这个新创建的对象不会继承构造函数的原型链上的属性和方法,因为它不是通过Object.create()
或new Object()
创建的,而是一个全新的空对象。 -
return null
: 如果构造函数返回null
,那么new
操作符的结果将是null
。这种情况并不常见,因为通常我们期望构造函数返回一个新创建的对象。返回null
意味着构造函数的执行结果实际上没有创建任何新对象。 -
return 1
: 如果构造函数返回了一个非对象值,比如数字1
,那么new
操作符的结果将是这个非对象值。然而,请注意,在JavaScript中,如果构造函数没有显式地返回任何值(即没有return
语句),那么new
操作符的结果将是一个新创建的对象实例,这个对象会继承构造函数的原型链上的属性和方法。因此,返回非对象值通常不是一个好的做法,除非你有特殊的理由要这样做。 -
return true
: 类似于返回数字1
,如果构造函数返回了一个布尔值true
,那么new
操作符的结果将是这个布尔值。这同样不是一个常见的做法,因为通常我们期望构造函数返回一个新创建的对象。
总结来说,使用new
关键字调用构造函数时,如果构造函数返回一个对象,那么这个对象将成为new
操作符的结果。如果构造函数返回一个非对象值,那么这个非对象值将成为new
操作符的结果。如果构造函数没有显式地返回任何值,那么new
操作符的结果将是一个新创建的对象实例,这个对象会继承构造函数的原型链上的属性和方法。