【问题标题】:Unable to call functions of a copied JS object无法调用复制的 JS 对象的函数
【发布时间】:2018-09-28 17:18:46
【问题描述】:

我正在创建一个 JS 对象的副本,以便在该副本上执行功能。但是,我无法调用复制对象中的函数,我只是得到一个错误,说函数在这个实例中不存在,有什么想法吗?

编辑:这里是代码

obj.isGridStateSolvable();
let tempobj = jQuery.extend(true, {}, obj);
tempobj.isGridStateSolvable();

第一行工作正常,功能可以访问,但第三行不行。

编辑 2:这是一个可测试的示例

class Num{
    constructor(numParam){
        this.number = numParam;
    }

    incrementNum(){
        this.number++;
    }
}

var num1 = new Num(5);
num1.incrementNum();

console.log(num1); //Outputs 6 as expected

let num2 = jQuery.extend(true, {}, num1);
num2.incrementNum();    //This function does not exist

【问题讨论】:

  • I'm creating a copy of a JS object in order to perform functions on the copy. 你是怎么复制的? any ideas 如果您执行了 JSON.stringify -> JSON.parse,那么这就是您的问题。 JSON中没有函数,所以“副本”在做成那种格式后就没有了。
  • 能否在您的问题中添加一个 code-sn-p,其中包含您用于复制对象的代码?
  • 忘记加代码了哈哈,马上更新
  • 我添加了一个简单的例子来表达我的问题

标签: javascript function object copy


【解决方案1】:

你可以尝试使用JS传播。

let tempobj = { ...obj };

这是 ES 的一个新特性,非常适合 JS 对象的复制。

【讨论】:

    【解决方案2】:

    npm 上有几个项目会将 JS 中对象的状态复制到新的目标类/模块中,这意味着这些功能将可用。

    这里有几个

    【讨论】:

      猜你喜欢
      • 2014-03-30
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2021-07-18
      • 1970-01-01
      • 2021-03-16
      • 2011-11-02
      相关资源
      最近更新 更多