构造函数return语句差异咨询:两类示例区别及参考资料
构造函数返回值的差异解析
在JavaScript里,用new操作符调用构造函数时,返回值遵循以下规则:
- 若构造函数返回引用类型(比如数组、对象、函数这类复杂类型),
new会直接返回这个引用类型的值,跳过原本创建的实例对象 - 若构造函数返回原始类型(数字、字符串、布尔值、
null、undefined),new会忽略这个返回值,返回之前通过this构建的实例对象
对应给出的两个例子:
第一个例子:返回引用类型(数组)
function x (){ this.name="Diana" return [1,2,3] } let newOne = new x() // 返回值是数组而非对象
这里构造函数x返回的是数组(属于引用类型),所以new x()直接返回这个数组,原本绑定了name属性的实例对象会被丢弃,最终newOne就是[1,2,3]。
第二个例子:返回原始类型(数字)
function ValString (){ this.name="Diana" return 12 } let newOneWithTheString = new ValString () // 返回值是对象而非12
这个构造函数返回的是数字12(原始类型),new操作符会忽略这个返回值,转而返回之前创建的实例对象,所以newOneWithTheString是带有name: "Diana"属性的对象,而不是12。
内容的提问来源于stack exchange,提问作者Diana
相关产品推荐
相关产品推荐

