一般来说,使用 new 构造函数(参数) 会得到新创建的对象。但是,如果在 js 的构造函数中,如果有 return 语句,使用 new 运算,会怎么样呢?
分 2 种情况:
- 如果返回的是基础数据类型,new 运算会忽略这个语句,得到的是新创建的对象。
function Person(name, age) {
this.name = name;
this.age = age;
// return [1,2];
// return function(){};
// return { a: 1, b: 2 };
return 'value';
}
let person = new Person('molly', 24);
console.log(person);
- 如果返回的是引用类型(数组、对象、函数),则 new 运算的到的就是 return 的那个数据,而不是新创建的对象。
(1)return 数组
function Person(name, age) {
this.name = name;
this.age = age;
return [1,2];
// return function(){};
// return { a: 1, b: 2 };
// return 'value';
}
let person = new Person('molly', 24);
console.log(person);
(2)return 函数
function Person(name, age) {
this.name = name;
this.age = age;
// return [1,2];
return function(){};
// return { a: 1, b: 2 };
// return 'value';
}
let person = new Person('molly', 24);
console.log(person);
(3)return 对象
function Person(name, age) {
this.name = name;
this.age = age;
// return [1,2];
// return function(){};
return { a: 1, b: 2 };
// return 'value';
}
let person = new Person('molly', 24);
console.log(person);