2016-08-16 432 views
10

假设我们有对象数组。Object.assign的替代方法(... array)

调用Object.assign(...array)使得这些对象中继承其中具有在对象具有索引i-1

索引i覆盖现有的属性例如对象:

var array=[{interf:'IPerson',name:'Someone'},{clss:'Person',name:'Ahmed'},{student:true}]; 
 
console.log(
 
    Object.assign(...array) // Object.assign(array[0],array[1],array[2]) 
 
)

现在,使用巴别与建议的对象传播语法,我们可以静态做到这一点:

{...array[0],...array[1],...array[2]} // spread used for each object not for array 

如何动态地做到这一点?

“扩展语法”的上下文有重叠。我的意思是如何在两者中使用扩展语法:

  • 用于数组传播元素。
  • 对于输出文本对象{}使继承

我试图{...array}并将其返回{0:<array[0]>,1:<array[1]>,2:<array[2]>}这是不相同的输出Object.assign(...array)

+3

ES7完成并发布,对象传播不是它的一部分。只要说“提议的对象传播语法”,不要说ES7。 – loganfsmyth

+0

作业与继承无关。使用术语“扩展”或“混入”。 – Bergi

+0

@loganfsmyth:您认为我们应该为每个提案都提供一个标签吗? (按需创建) –

回答

20

您正在寻找

var obj = Object.assign({}, ...array) 

,创建一个新的对象,而不是突变array[0]

+0

你会碰巧有'.assign()'铺设的IE11安全替代方案吗?寻找现在,因为[这](https://docs.microsoft.com/en-us/scripting/javascript/reference/object-assign-function-object-javascript)(见要求) – Nukeface

+1

不,你可以安全地在IE11中使用'Object.assign',只是[polyfill it](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill) – Bergi

+0

我刚刚结果也是这样,谢谢 – yussan