关于js构造函数

127 阅读1分钟

构造函数后加括号与不加括号

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),实例对象就会返回该引用类型。