传播对象参数

时间:2018-01-31 17:32:08

标签: javascript

使用扩展语法,我们可以将数组函数参数扩展为不同的参数变量:

var mySpreader = function (nk, mk, zk) {
    console.log('Spread parameter 1: ' + nk);
    for (let v in arguments){
        console.log('Spread parameter: ' + arguments[v]);
    }
};

var spreadArr = ['a', 'b', 'c'];
mySpreader(...spreadArr);

问题1:为什么不能以相同的方式传播对象参数?以下引发错误:

var spreadObj = {mk: 'm', nk: 'n', zk: 'z'};
mySpreader(...spreadObj);

To" fix"如上所述,似乎我们必须使用解构赋值来模拟"传播":

var myDestructor = function ({nk, mk, zk}) {
    console.log('Destructioned parameter: ' + nk);
    for (let v in arguments[0]){
        console.log(v);
        console.log(arguments[0][v]);
    }
};

myDestructor({mk: 'm', nk: 'n', zk: 'z'});

问题2 :myDestructor中的循环无法访问析构变量。相反,循环将传入数据视为完整(非解构)对象。那是(有点)预期的。有没有办法循环遍历破坏的不同参数值?

1 个答案:

答案 0 :(得分:1)

  

为什么不能以相同的方式传播对象参数?

Spreading用于可迭代的东西,使用数组用于位置参数。对象不可迭代 - 他们甚至没有订单!

  

myDestructor中的循环只是将传入数据视为完整(非解构)对象。知道为什么吗?

好吧,因为传入的数据 - 你的函数被调用的参数 - 一个对象。 arguments[0]是一个对象。您在参数声明中从其属性初始化了多个变量只是语法糖。你也可以写function (o) { var {nk, mk, zk} = o;而不是function ({nk, mk, zk}) {