我正在构建一个简单的克隆函数:
function clone (value) {
return JSON.parse(JSON.stringify(value))
}
问题是我还需要这样做:
JSON.parse(JSON.stringify({}, object))
和
JSON.parse(JSON.stringify({}, value, object))
如何修改我的克隆功能以接受那些额外的参数而不会破坏它?
答案 0 :(得分:1)
因为我们在包含传递给该函数的所有参数的函数内部都有可论证,所以我们可以这样编码。
function clone (value) {
return JSON.parse(JSON.stringify(value), arguments[1], arguments[2])
}
如果您可以使用Speads语法。
function clone (value) {
var arr = arguments.slice();
arr.shift();
return JSON.parse(JSON.stringify(value), ...arr)
}
答案 1 :(得分:1)
函数的.apply
方法的一个用途是使用参数数组调用它。您可以使用它来解决您的问题。
function clone(...args) {
return JSON.parse(JSON.stringify.apply(null, args))
}
如果您需要支持不支持spread operator的浏览器,并且出于某种原因无法使用构建工具,则可以使用arguments
。但请注意arguments
is deprecated
function clone() {
return JSON.parse(JSON.stringify.apply(null, arguments))
}
答案 2 :(得分:1)
function clone () {
var s=[];
for (var i=0; i < arguments.length; i++) {
s.push(JSON.stringify(arguments[i]));
}
return JSON.parse(JSON.stringify(s));
}
console.log(clone({a:'aa'},{b:'bb'},{c:'cc'}))
&#13;
您可以遍历所有参数并解析JSON。