Метод ToString () класса JS ES6 не работает даже с Babel или в Chrome - PullRequest
0 голосов
/ 02 января 2019

для моего кода ниже я хочу установить метод toString () по умолчанию, который переопределяет встроенный метод toString () для этого класса.Но это не работает, и я получаю вывод "Queue {data: []}" вместо ожидаемого "Hello, это пример".Я посмотрел на некоторые уже обсуждаемые похожие вопросы по SO, но без помощи.Я также попробовал на последней версии Chrome и поведение такое же.У меня есть Node 10.13 с Babel 6 (babel-node --presets env, stage-2 queue.js).Ищите здесь мнение эксперта.

class Queue {
  constructor() {
    this.data = [];
  }
  toString() {
    console.log("Hello This is example");
  }
}

const queue1 = new Queue();
console.log(queue1);

Ответы [ 2 ]

0 голосов
/ 02 января 2019

для моего кода ниже я хочу установить метод toString () по умолчанию, который переопределяет встроенный метод toString () для этого класса.Но он не работает, и я получаю вывод "Queue {data: []}" вместо ожидаемого "Hello Это пример".

class Queue {
  constructor() {
    this.data = [];
  }
  toString() {
    console.log("Hello This is example");
  }
}

const queue1 = new Queue();
console.log(queue1);

В приведенном выше коде метод toString нене переопределять метод класса toString.Зачем?Поскольку toString класса возвращает a String.

В вашем коде console.log("Hello This is example"); не возвращает никакого значения .Вот почему вы получаете вывод: Очередь {данные: []} .Это вывод по умолчанию.Если вы удалите метод toString из своего класса Queue, оператор console.log(queue1); все равно будет печатать: Очередь {data: []} .

Чтобы сделать QueueПредставление объекта класса в виде строкового значения, вам нужно кодировать что-то вроде этого:

toString() {
    return "Hello this is an example";
}

Чтобы использовать toString в своем приложении, вы можете попробовать код в любой из строк # 2 или # 3 ниже, и будет напечатано: «Привет, это пример».

const queue1 = new Queue();
console.log(queue1); // #2
console.log(queue1.toString()); // #3

Также посмотрите эту ссылку и Object.prototype.toString () .

0 голосов
/ 02 января 2019

Вы должны вызвать вызов для .toString() явно или неявно

console.log(queue1.toString());
console.log(queue1 + "");
console.log([queue1, queue2].join());

И .toString() должен вернуть строковое представление:

toString() { return "..." }

class Queue {
  constructor() {
    this.data = [];
  }
  toString() {
    return "Hello This is example"; // toString has to return the string representation
  }
}

const queue1 = new Queue();
console.log(queue1 + "");

const queue2 = new Queue();
console.log([queue1, queue2].join());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...