鍍金池/ 問答/HTML/ 對象字面量和new關(guān)鍵字實(shí)例化對象區(qū)別

對象字面量和new關(guān)鍵字實(shí)例化對象區(qū)別

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);

上面的兩種寫法哪種方式好些?有什么區(qū)別

回答
編輯回答
初念

當(dāng)然是字面量方式, 簡潔, 快, 關(guān)鍵是可以少敲很多代碼

2017年3月24日 15:52
編輯回答
菊外人

答案是不一定。
取決于你這個(gè)數(shù)據(jù)解構(gòu)會不會被大量復(fù)用到。
假設(shè)這個(gè)結(jié)構(gòu)是這樣的
我們暫時(shí)稱它為obj

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

如果你有多處都需要寫這個(gè)
那你每次寫一遍,甚至是粘貼一遍都是痛苦

又或者說
你有一個(gè)方法 要求傳入的參數(shù)一定要是類似obj那樣的結(jié)構(gòu)
如果你用new關(guān)鍵字創(chuàng)建出來一個(gè)實(shí)例,則可以快速的使用instanceof來判斷
反之,你就要一個(gè)個(gè)屬性的去校驗(yàn)過來

2017年9月17日 15:17