$ .extend函数构造函数的复制属性

时间:2015-03-10 11:51:01

标签: jquery underscore.js lodash

我们使用函数构造函数(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。

1 个答案:

答案 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"案例中做一些更聪明的事情来克隆内置类型(数组,DateRegExp等)。您可以在jQuery.type(value)switch,它可以为您提供更多信息。