【问题标题】:How do I clone/extend a FormData object? [duplicate]如何克隆/扩展 FormData 对象? [复制]
【发布时间】:2016-02-09 23:02:49
【问题描述】:

我有一组 POST 端点,我需要在其中发送一组静态参数以及一些特定于请求的动态参数。

对于每个请求,我都在执行以下操作:

var staticParams = {...}, // some arbitrarily large object
    localParams = {...},
    formData = new FormData();

Object.keys(staticParams).forEach(function(key) {
  formData.append(key, staticParams[key]);
});

Object.keys(localData).forEach(function(key) {
  formData.append(key, localParams[key]);
});

这不是一笔巨大的税,但为每个请求重复第一次枚举似乎很愚蠢。 如何克隆和扩展我的 FormData 对象,这样我就不必每次都构建整个对象?


FWIW,我知道how to clone Objects;我相信FormData 是独一无二的,因为键/值对不仅仅是对象上的键,所以我不清楚克隆它的正确方法。

【问题讨论】:

  • 据我所知,such 是不可能的。但我认为重复为多个请求附加数据不会产生太大影响。
  • @Bergi 你有一个双重否定;你认为这是一个问题还是不是一个问题?
  • 哎呀,我的意思是这不是问题 - 既不是空间问题,也不是时间问题。
  • var f = function() {this. formData = {'x':'y'};} var newFormData = new f()。 formData;,新的关键字应该可以快速解决问题
  • @shayte 你好像不明白FormData 是什么? developer.mozilla.org/en-US/docs/Web/API/FormData/FormData

标签: javascript xmlhttprequest form-data


【解决方案1】:

您可以使用以下函数来扩展您的对象。

if(Object.prototype.extend === undefined) {
    Object.prototype.extend = function(obj) {
        for (var i in obj) {
            if (obj.hasOwnProperty(i)) {
                this[i] = obj[i];
            }
        }
    };
}

这会将对象“obj”的属性添加到调用函数的对象中。

在您的情况下,您可以按如下方式使用它:

formData.extend(staticParams);
formData.extend(localParams);

【讨论】:

  • 我知道如何克隆对象(我当然不会通过弄乱对象原型来做到这一点),但FormData 不会将其值直接存储为对象。
猜你喜欢
  • 1970-01-01
  • 2011-03-29
  • 2013-04-06
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2019-11-18
相关资源
最近更新 更多