如何“取消引用”对象?

时间:2018-12-05 17:12:25

标签: javascript php

在JavaScript中,如何取消引用函数返回的对象?

例如:

var tmp = getTextProperties();
font   = tmp.font;
size   = tmp.size;
color  = tmp.color;
bold   = tmp.bold;
italic = tmp.italic;

PHP具有list()构造,其功能类似:

list($font, $size, $color, $bold, $italic) = getTextProperties();

2 个答案:

答案 0 :(得分:4)

使用ES6,您可以按以下方式分解对象:

var { font, size, color, bold, italic } = getTextProperties();

请参见JavaScript Destructuring assignment

答案 1 :(得分:0)

要添加到@markmoxx所说的内容(从现在开始(形成未来!)),我们有新的解构方法。现在,我们可以在解构语句中重命名并分配默认值。思考一下:

let obj = {a,: 5, b: 6, c: [7,8],d:[9,10]e: {f: 11, g: 12}};

let {a: first, b: second, c: arr, d: [innerFirst, innerSecond], e: {f: objFirst, g: objSecond}, h = "default1", i: [defaultArr1 = "default2", defaultArr2 = "default3"], j: {k: objDefault1 = "default4"} } = obj;

console.log(first, second, arr, innerFirst, innerSecond, objFirst, objSecond, h, defaultArr1,defaultArr2, objDefault1);

// This outputs: 
5, 6, [7,8],9,10,11,12,"default1","default2","default3","default4"

因此,现在我们可以更好地控制销毁分配。

编辑:用于一致性

PHP的list函数主要用于数组(大部分)。并且那有一些怪异的行为(反向分配取决于php版本,等等)。 javascript中的解构是不同的。即使使用上述重命名语法,您仍然需要了解对象键/数组索引。同样(这可能是一个优先问题,但是),用javascript进行分解具有更大的功能,因为数组和对象都可以被分解为任何嵌套深度,同时允许您重命名和分配默认值。但请注意,因为结构调整很容易失控。考虑一下过度破坏结构的示例:


const NameView = ({context: { state: [ state, update ], id, display: {tag, size = 32, type = "text", style: { wrapper: outerouter = "card", content: innerouter = "content", banner: {wrapper: outerinner = "title",content: innerinner = "content"} } } } }) => (
    <div className={outerouter}>
        <input className={innerouter} type={type} maxlength={size} size={size} value={name} id={id} name={id} onChange={(e) => update(e.target.value)}/>
        <div className={outerinner}>
            <label for={id} className={innerinner}>{tag}</label>
        </div>
    </div>
)