如何创建只保留数据而不保留函数的javascript对象的副本?

如何创建只保留数据而不保留函数的javascript对象的副本?,javascript,Javascript,我正在准备大对象,因此我还添加了一些函数来维护它们。我需要发送此对象以服务传入的查询。我认为发送函数也没有任何好处。我只想发送数据。如何剥离对象的函数,使其在发送时更精简 编辑:使用JSON.stringify和JSON.parse确认有效 l={} Object {} l.zz=19 19 l.f = function(){ console.log(this.zz) } function (){ console.log(this.zz) } l Object {zz: 19, f: funct

我正在准备大对象,因此我还添加了一些函数来维护它们。我需要发送此对象以服务传入的查询。我认为发送函数也没有任何好处。我只想发送数据。如何剥离对象的函数,使其在发送时更精简

编辑:使用JSON.stringify和JSON.parse确认有效

l={}
Object {}
l.zz=19
19
l.f = function(){ console.log(this.zz) }
function (){ console.log(this.zz) }
l
Object {zz: 19, f: function}
JSON.stringify(l)
"{"zz":19}"
JSON.parse(JSON.stringify(l))
Object {zz: 19}
只需使用JSON.stringify()生成一个字符串并对其进行解析

JSON.parse(JSON.stringify(obj))

生成一个字符串并对其进行分析:

JSON.parse(JSON.stringify(object))

此函数将执行数据属性的深度复制,以释放函数:

function deepCopyObject(src)
{
    var tgt=[]
    for (var x in src)
    {
        var p=src[x]
        if (!(p instanceof Function))
        {
            if (p instanceof Object)
            {
                tgt[x]=copyObject(p)
            }
            else
            {
                tgt[x]=p
            }
        }
    }
    return tgt
}
要使用它,只需执行:

var myCopy=deepCopyObject(mySrc)

基本上,您可以使用
JSON.stringify
将对象转换为JSON字符串。它将把所有不是函数而是值的公共字段(由
this
分配)放入JSON字符串中

然后将
JSON.stringify
的输出放入
JSON.parse
中,得到一个干净的对象,没有函数,只有值

基本上你只需要做的是:

var clean = JSON.parse(JSON.stringify(objectvariable));
下面是一些示例代码,它一步一步地将所有内容分解开来:-) 点击F12查看控制台中的输出

/**带有函数和值的示例对象**/
函数ObjectHolder(){
this.x=“你好”;
this.y=“世界”;
这个.z=“宇宙”;
this.which=false;
}
/**生成一个由布尔值定义的字符串**/
ObjectHolder.prototype.toString=函数(){
返回此.x++(this.which?this.y:this.z);
}
/**带有函数和值的示例对象**/
ObjectHolder.prototype.switchIt=函数(){
this.which=!this.which;
}
/**实例化对象**/
var takeit=newobjectholder();
/**显示当前输出,以查看其是否工作**/
log(takeit.toString());
/**测试反演**/
takeit.switchIt();
/**输出应该改变**/
log(takeit.toString());
/**把这个对象变成一个字符串**/
var str=JSON.stringify(takeit);
/**获取JSON字符串并将其转换为对象**/
var obj=JSON.parse(str);
/**显示值之间的差异**/
log(“带有函数的ObjectHolder(var takeit)对象”,takeit);
log(“JSON字符串”,str);

日志(“无功能对象”,obj)
simply
JSON.parse(JSON.stringify(object))
我实际上需要做很多清理工作。你认为这会比JSON stringify+parse更快吗?我的想法是我只需要做一个浅拷贝。tgt[x]=copyObject(p)将变成正确的tgt[x]=p。对于浅层复制,您可以避免递归调用。我认为它将比serialize+parse快,因为它节省了序列化JSON字符串对象的创建,也节省了解析时间。