JavaScript: как преобразовать класс в класс после вызова new - PullRequest
1 голос
/ 18 сентября 2019

TL; DR: Мне нужно добавить немного JavaScript в BrowserView в Electron, используя executeJavaScript.Этот код должен быть классом.Как я могу преобразовать класс в класс?

Я обнаружил, что вы можете преобразовывать функции в строку, используя +.

const fn = function() {
  console.log('Hello');
};
const functionToText = '' + fn;
console.log(functionToText);
// function() {
//   console.log('Hello');
// }
*/

Но моя проблема в том, как вы можете классифицировать классы?Мне нужна строковая версия следующего объекта, созданного из класса с new для его внедрения.

class Person {
  constructor({ name }) {
    this.getName = () => name;
  }
}
const person = new Person({ name: 'John'});
const str = // somehow stringify person here
console.log(str);
// the person object
view.webContents.executeJavaScript(`window.person = ${str}`);

Редактировать:

Вот как я оказалсяреализуя его на основании принятого ответа:

view.webContents.executeJavaScript(
  `window.person = new ${str}({ name: 'John' })`
);

1 Ответ

1 голос
/ 18 сентября 2019

У вас было решение в вашем вопросе.Тот же подход, который работает для функций, работает и для классов.

class Person {
  constructor({ name }) {
    this.getName = () => name;
  }
}
const str = '' + Person;
console.log(str);

Обновлено в ответ на дополнительные данные. Невозможно сериализовать объект и сделать его пересекающим границы выполнения, потому чтов этот момент он больше не является данными, а вместо этого работает в памяти.

Один из подходов, который вы можете использовать, - это вызвать весь код внутри вызова к executeJavaScript

Например:

view.webContents.executeJavaScript(`
class Person {
  constructor({ name }) {
    this.getName = () => name;
  }
}

window.person = new Person({name: 'John'});
`);

Или альтернативно

view.webContents.executeJavaScript(`
(function() {
    class Person {
      constructor({ name }) {
        this.getName = () => name;
      }
    }

    window.person = new Person({name: 'John'});
})();
`);
...