Jquery $。扩展函数构造函数的副本属性
我们使用函数构造函数(Douglas Crockford的函数继承模式),只复制属性来验证它们。代码是这样的Jquery $。扩展函数构造函数的副本属性,jquery,underscore.js,lodash,Jquery,Underscore.js,Lodash,我们使用函数构造函数(Douglas Crockford的函数继承模式),只复制属性来验证它们。代码是这样的 var test= function(TestSpec){ var thattest = {}; thattest.begindate = TestSpec.begindate; thattest.getBegindate = function(){ return thattest.begindate;
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 + ']');
});
如何仅复制属性?我正在寻找一种使用函数样式将属性复制到另一个对象的方法。
如果需要,我们可以使用下划线.js或lodash。如果您的目标是只复制不引用函数的属性,那么使用自己的递归函数就相当简单:
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
等)。您可以打开
,这会为您提供更多信息。定义“属性”。您是指不引用函数的属性吗?不清楚您想要实现什么。特别是,$.extend(true,{},test)
看起来没有什么特别的意义。我几分钟前问过它:-)我们只复制属性,不复制函数。代码到处重复,我们有很多函数构造函数。@Roamer我试图使用JQuery,因为我在寻找一种简洁的方法。我还想尝试使用下划线或lodash的功能性样式。仍然不清楚。你所说的“函数构造函数”是什么意思?你想对它们做什么?强大的underline.js或lodash呢?@MohanRadhakrishnan:好吧,你在API文档中看到了做这件事的东西吗?console.log(u.functions(object));我想我可以用这个排除函数。但是console.log(u.functions(test));不起作用。