Добавление примитива javascript toString не позволяет структурированному клону веб-мастеру - PullRequest
0 голосов
/ 17 января 2019

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

пример

g = {"coordinates":[[-94.07818059402895,-61.057321322937256]],"type":"MultiPoint"}
g.toString = function(){return JSON.stringify(this)}

Не удалось выполнить 'postMessage' для 'Worker': function> objectToString () { return JSON.stringify (this); } не может быть клонирован

Если я изменяю proto , я получаю желаемые результаты (вид), он проходит алгоритм структурированного клона, но это изменяет Object.prototype

Я попытался использовать прокси, и это дает мне нужную строку, но не передает структурированный клон веб-работнику.

p = new Proxy({
  "coordinates": [
    [-94.07818059402895, -61.057321322937256]
  ],
  "type": "MultiPoint"
}, {
  get: function(obj, prop) {
    if (prop === "toString") {
      return () => {
        return JSON.stringify(obj);
      };
    }
    return obj[prop];
  }

})

'postMessage' для 'Worker': [объект Object] не может быть клонирован.

Можно ли получить оба желаемых результата, не проверяя каждый объект, который я передаю?

...