构造函数后加括号与不加括号
function Fn(){
this.user = '小明';
}
var a = new Fn();
var b = new Fn;
console.log(a) // {user: '小明'}
console.log(b) // {user: '小明'}
直接输出a和b,发现构造函数加括号和不加括号没区别。
function Fn() {
this.user = '小明'
}
console.log(new Fn().user) // 小明
console.log(new Fn.user) // 报错 Fn.user is not a constructor
再打点调用属性就不行了,这是为什么呢,由于new的运算优先级要小于.的运算优先级,所以先执行了Fn.user。
而Fn.user的结果并非是一个构造函数,所以出现了报错。
构造函数内使用return
function Fn() {
this.user = '小明'
return 1
}
function Fn2() {
this.user = '小明'
return { class: 1 }
}
console.log(new Fn()) // {user: '小明'}
console.log(new Fn2()) // {class: 1}
如果返回一个基础类型数据(null, undefined, Boolean, String, Number, Symbol )的,对构造函数是没有影响的,构造函数依然会返回新创建实例对象。
如果返回的是一个引用类型(Object, Array, function),实例对象就会返回该引用类型。