new和不用new的构造函数,有什么区别?
下面从有return和无return,如果在有return的情况下,return原始类型数据和return引用应用类型数据等几方面进行论述👍👍👍
区别1:当没有return时
function Person(name){
this.name=name
console.log(this.name)
console.log(this)
}
var a=Person('dema')
var b=new Person('dema')
console.log('new',b)
console.log('不new',a)

结论
- 👀 在没有return的情况下
- 👀 不new,this指向全局大对象,不会默认返回任何对象
- 👀 new,this对象指向的是person实例
区别2:有return的情况下
返回的是简单数据类型
function Person(name){
this.name=name
console.log(this.name)
return 2
}
var a=Person('haozi')
var b=new Person('dema')
console.log(a)
console.log(b)

结论
- 👀 如果有返回值,并且是原始数据类型
- 👀 不 new,返回的是简单数据类型的返回值
- 👀 new,返回的依然是Person实例
返回值是引用数据类型
function Person(name){
this.name=name
console.log(this.name)
return [1,2,3,4,5]
}
var a=Person('dema1')
var b=new Person('dema2')
console.log(a)
console.log(b)
console.log(a.name)
console.log(b.name)

总结
- 👀 不使用new的构造函数,有return,得到的就是return的值;没有return,得到的就是undefined
- 👀 使用new,没有return或者return的是简单类型的返回值,直接忽略,返回的都是实例化后的对象,如果return的值是引用类型,那么拿到的就是这个引用类型的数据。