构造函数是用来构造类的,然后类产生对象。这个是JS这门语言和Java,python的这类面向对象语言的区别。
我们首先来看,构造函数的返回值,如果是一个对象或者数组。他会返回什么回来。
function Person(name,age){
this.name = name;
this.age = age;
return{
name:"我是人"
}
}
var p1 = new Person("张三",18);
console.log(p1) //{name: '我是人'}
如果你return的是一个对象或者数据,他会显示的返回这个对象或者数组。
如果返回的是一个字符串,数值类型,布尔类型,null,undefined,不影响他返回回来的值。如果是包装类,或者对象的类型就会影响他的返回值。
function Person(name,age){
this.name = name;
this.age = age;
return "我是人"
}
var p1 = new Person("张三",18);
console.log(p1)//Person {name: '张三', age: 18}
如果你返回的是this呢?因为这个new关键字返回的,所以他内部本来就会返回一个this。你返回this,也是返回你new的值。
结论:如果构造器不显示地返回任何数据,或者返回一个非对象类型的数据,就不会造成上述问题。