我们使用函数构造函数(Douglas Crockford的函数继承模式)并仅复制属性以验证它们。代码是这样的。
var test= function(TestSpec){
var thattest = {};
thattest.begindate = TestSpec.begindate;
thattest.getBegindate = function(){
return thattest.begindate;
};
return thattest;
}
//这是我最初尝试复制属性
var copy = $.extend(true, {}, test )
console.log(copy);
_.each(copy, function(c) {
console.log('[' + c + ']');
});
如何仅复制属性?我正在寻找一种方法来使用功能样式将属性复制到另一个对象。 如果需要,我们可以使用underscore.js或lodash。
答案 0 :(得分:0)
如果你的目标是只复制那些不引用函数的属性,那么使用你自己的递归函数就相当简单了:
function copyAttributes(src) {
var dest = {};
Object.keys(src).forEach(function(key) {
var value = src[key];
switch (typeof value) {
case "function":
break;
case "object":
dest[key] = copyAttributes(value);
break;
default:
dest[key] = value;
break;
}
});
return dest;
}
用法:
var copy = copyAttributes(test);
您可能希望在上面的"object"
案例中做一些更聪明的事情来克隆内置类型(数组,Date
,RegExp
等)。您可以在jQuery.type(value)
上switch
,它可以为您提供更多信息。