对象字面量和new关键字实例化对象区别

var t1 = [];
var t2 = [];
var arr = [
  {
    id: 1,
    name: 'a1'
  },
  {
    id: 2,
    name: 'a2'
  },
  {
    id: 3,
    name: 'a3'
  }
]

function test(id, name) {
  this.id = id
  this.name = name
  this.idAndName = id + name
}

arr.forEach((item, index) => {
  // 写法1,直接添加
  t1.push({
    id: item.id,
    name: item.name,
    idAndName: item.id + item.name
  })

  // 写法2,通过new的方式添加
  t2.push(new test(item.id, item.name));
})
console.log(t1, t2);

上面的两种写法哪种方式好些?有什么区别

阅读 2.5k
2 个回答

当然是字面量方式, 简洁, 快, 关键是可以少敲很多代码

答案是不一定。
取决于你这个数据解构会不会被大量复用到。
假设这个结构是这样的
我们暂时称它为obj

{
    a:[
        {a1:"foo",a2:"bar"},
        {a1:"baz",a2:"bar"},
    ],
    b:"hello",
    c:"world",
    //...
    z:"too much",
}

如果你有多处都需要写这个
那你每次写一遍,甚至是粘贴一遍都是痛苦

又或者说
你有一个方法 要求传入的参数一定要是类似obj那样的结构
如果你用new关键字创建出来一个实例,则可以快速的使用instanceof来判断
反之,你就要一个个属性的去校验过来

推荐问题
宣传栏