JavaScript:如何在调用 new 后对 class 进行字符串化
JavaScript: How to stringify a class, after calling new
TL;DR: 我需要使用 executeJavaScript
将一些 JavaScript 注入 Electron 中的 BrowserView
。此代码需要 class。如何将 class?
字符串化
我发现您可以使用 +
.
对函数进行字符串化
const fn = function() {
console.log('Hello');
};
const functionToText = '' + fn;
console.log(functionToText);
// function() {
// console.log('Hello');
// }
*/
但我的问题是,如何将 classes 字符串化?我需要使用 new
从 class 创建的以下对象的字符串版本来注入它。
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' })`
);
你的问题已经有了答案。
适用于函数的相同方法也适用于 类。
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'});
})();
`);
TL;DR: 我需要使用 executeJavaScript
将一些 JavaScript 注入 Electron 中的 BrowserView
。此代码需要 class。如何将 class?
我发现您可以使用 +
.
const fn = function() {
console.log('Hello');
};
const functionToText = '' + fn;
console.log(functionToText);
// function() {
// console.log('Hello');
// }
*/
但我的问题是,如何将 classes 字符串化?我需要使用 new
从 class 创建的以下对象的字符串版本来注入它。
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' })`
);
你的问题已经有了答案。 适用于函数的相同方法也适用于 类。
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'});
})();
`);