为什么不通过传播运算符破坏MessageEvent的返回所有属性?

时间:2018-10-12 22:09:46

标签: javascript

在Chrome开发者控制台中:

event = new MessageEvent({data: 'some data'})
MessageEvent {isTrusted: false, data: null, origin: "", lastEventId: "", source: null, …}

当我尝试点差运算符时:

{...event}
{isTrusted: false}

...我只看到isTrusted属性。

1 个答案:

答案 0 :(得分:1)

spread运算符仅复制对象自身的可枚举属性,而不复制原型链上较高的属性。如果您查看event自己的属性,就会发现它仅具有isTrusted属性。

> Object.getOwnPropertyNames(event)
> ["isTrusted"]

如果您向上看原型链,就会看到其他一些属性在哪里:

> Object.getOwnPropertyNames(event.__proto__)
> (7) ["data", "origin", "lastEventId", "source", "ports", "initMessageEvent", "constructor"]