如何在ES6中复制对象方法

时间:2019-07-07 13:48:51

标签: javascript cloning

我想使用传播运算符克隆一个对象。但是,方法并没有复制如图所示

我知道您可以执行Object.Assign(),但我正在寻找一种使用ES6语法实现此目的的方法

Deep copy in ES6 using the spread syntax处的解决方案涉及深度克隆:我只对复制方法和属性感兴趣

How to clone a javascript ES6 class instance处的解决方案使用Object.Assign()

class Test {
  toString() {
    return "This is a test object";
  }
}

let test = new Test();
let test2 = { ...test };

console.log(String(test));
console.log(String(test2));

// Output: This is a test object
// Output: [object Object]

2 个答案:

答案 0 :(得分:2)

此:

class Test {
  toString() {
    return "This is a test object";
  }
} 

严格来说,没有定义任何 object方法。而是定义了类方法。

您需要将方法作为“自身属性”直接附加到对象上,以便传播以复制它们:

class Test {
  constructor() {
    // define toString as a method attached directly to
    // the object
    this.toString = function() {
      return "This is a test object";
    }
  }
}

let test = new Test();
let test2 = { ...test };

console.log(String(test));
console.log(String(test2));

答案 1 :(得分:0)

我认为您可以这样做:

class Test {
  toString() {
    return "This is a test object";
  }
}

let test = new Test();
let test2 = {};

test2.__proto__ = test.__proto__;

console.log(String(test));
console.log(String(test2));

但是我不知道,也许这是一种不好的做法:/ ..