javascript - 通过 Object.assign 中的父赋值来分配嵌套在对象中的许多值

标签 javascript object computed-properties

我一直在尝试从 Object.assign 的父赋值中分配嵌套在对象中的许多值。我让它按照我想要的方式工作。但是,我不知道它是如何或为何起作用的。为什么需要在第二个 Object.assign 计算 style 之前计算它?

var cards = Object.assign(card=document.createElement('div'),style=card.style, {
id:'cards',
innerHTML:'hello world',
  [style]:[Object.assign(style,{
    width:"300px",
    margin:'auto',
    color:'green',
    height:'300px',
  })]
  });
  
var body=  document.querySelector('body');
  body.appendChild(cards);

最佳答案

该代码不会执行您想要的操作,并且不会按照您想象的方式工作。请注意,您是 accidentally introducing global variables ,并且您计算出的属性键将是无用且未使用的 "[object CSSStyleDeclaration]"。它确实达到了预期的效果,因为 Object.assign(style, …) 已被评估,但在嵌套对象中执行它没有任何影响。

你应该这样写

var card = document.createElement('div');
Object.assign(card, {
    id:'cards',
    innerHTML:'hello world'
});
var style = card.style;
Object.assign(style, {
    width:"300px",
    margin:'auto',
    color:'green',
    height:'300px',
});

var body = document.querySelector('body');
body.appendChild(cards); // probably not necessary, cards already is part of the document

或者可能更简单

var card = document.createElement('div');
card.id = 'cards';
card.innerHTML = 'hello world';
var style = card.style;
style.width = "300px";
style.margin = 'auto';
style.color = 'green';
style.height = '300px';
<小时/>

当我们对 Object.assign 进行脱糖时,也许有助于了解您做错了什么。您的代码相当于

_temp1 = card=document.createElement('div'); // global variable!
_temp2 = style=card.style; // global variable!
_temp3 = {
    id:'cards',
    innerHTML:'hello world'
};
_temp4 = style;
_temp5 = {
    width:"300px",
    margin:'auto',
    color:'green',
    height:'300px',
};
for (p in _temp5) // the Object.assign(style, {…})
    _temp4[p] = _temp5[p];

_temp3[String(style)] = [_temp4]; // WTF

for (p in _temp2) // the first part of Object.assign(card, style, …)
    _temp1[p] = _temp2[p]; // WTF
for (p in _temp3) // the second part of Object.assign(card, …, {…})
    _temp1[p] = _temp3[p];

var cards = _temp1;

var body = document.querySelector('body');
body.appendChild(cards);

关于javascript - 通过 Object.assign 中的父赋值来分配嵌套在对象中的许多值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44320573/

相关文章:

javascript - 如何使用javascript提取光标位置之前和@字符之后的字符串,直到第一个空白字符?

c++ - 删除带有指针的列表以及必须清除的对象

vue.js - Vuejs : Can't access (computed) props within computed property loop

javascript - 单击按钮时打开 Ionic 图像模式

javascript - 您将如何根据表单选择元素的值执行数据库查询?

java - ObjectOutputStream 只读取给它的第一个实例(java)?

java - 当没有构造函数的类的默认构造函数是 'automatically' 时,为什么编译器会提示父类(super class)没有构造函数?

swift - 用返回非可选值的计算属性覆盖返回可选值的计算属性

swift - 如何在 Swift 中覆盖协议(protocol)扩展的计算属性

javascript - 插入数组的特定位置而不删除JS中的元素