【发布时间】:2020-05-16 11:08:32
【问题描述】:
我正在开发一个 chrome 扩展,我正在使用 iframe 元素创建一个侧面板。
我有一个对象存储相应iframe 的样式:
const sidePanelStyle = {
background: 'white',
// some other vars
};
我创建iframe 并分配我的设置:
let sidePanel = document.createElement('iframe');
Object.assign(sidePanel.style, sidePanelStyle);
一切正常,但在我这样做之前
sidePanel.style = Object.assign(sidePanel.style, sidePanelStyle);
它没有将任何东西合并到sidePanel.style 中(我希望.assign() 返回一个合并的对象,根据MDN)。
我是 JS 新手,所以问题是:
-
Object.assign()到底缺少什么? - 将多个设置属性分配给现有框架中的对象的最佳做法是什么以及将它们保留在我的源代码中的最佳做法是什么(单独 模块?一个或多个对象?等)。
虽然返回合并对象是多余的(.assign() 方法将所有内容合并到第一个参数中),但我仍然很好奇为什么在返回对象时它不起作用。
const sidePanelStyle = {
background: 'gray',
height: '100%',
padding: '20px',
width: '400px',
position: 'fixed',
top: '0px',
right: '0px',
zIndex: '9000000000000000000',
};
let sidePanel = document.createElement('iframe');
// this works fine
// Object.assign(sidePanel.style, sidePanelStyle);
// this doesn't
sidePanel.style = Object.assign(sidePanel.style, sidePanelStyle);
document.body.appendChild(sidePanel);
【问题讨论】:
-
也就是说,
sidePanel.style = Object.assign(sidePanel.style, sidePanelStyle);中的sidePanel.style = Object.assign(sidePanel.style, sidePanelStyle);没有任何理由。Object.assign确实返回了合并的对象,但是它将对象合并到第一个对象中,因此如果您已经引用了该对象,则无需进行分配。只需Object.assign(sidePanel.style, sidePanelStyle);就足够了。 (如果您正在创建它,它会返回它作为第一个参数接收的对象,例如const obj = Object.assign({}, ...);。) -
插入了一个 sn-p
标签: javascript object dom iframe assign