Как скопировать методы объекта в ES6 - PullRequest
3 голосов
/ 07 июля 2019

Я хочу клонировать объект, используя оператор распространения. Однако методы не копируются, как показано

Я знаю, что вы можете сделать Object.Assign (), но я ищу способ сделать это с использованием синтаксиса ES6

Решение на Глубокое копирование в ES6 с использованием синтаксиса распространения касается глубокого клонирования: меня интересуют только методы копирования и свойства

Решение на Как клонировать экземпляр класса ES6 javascript использует 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 ]

2 голосов
/ 07 июля 2019

Это:

class Test {
  toString() {
    return "This is a test 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));
0 голосов
/ 07 июля 2019

Я думаю, вы можете сделать это так:

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));

Но я не знаю, может быть, это плохая практика: /..

...