gpt4 book ai didi

JavaScript:如何在调用 new 后对类进行字符串化

转载 作者:行者123 更新时间:2023-11-30 19:16:00 25 4
gpt4 key购买 nike

TL;DR:我需要使用 executeJavaScript 将一些 JavaScript 注入(inject) Electron 中的 BrowserView .此代码需要类。如何将类(class)字符串化?

我发现您可以使用 + 对函数进行字符串化。

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

但我的问题是,如何将类字符串化?我需要使用 new 从类创建的以下对象的字符串版本来注入(inject)它。

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'});
})();
`);

关于JavaScript:如何在调用 new 后对类进行字符串化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58000056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com