我们真的可以删除由es6" class"?
创建的类
class myClass{}
delete myClass;
console.log(myClass); //output: class myClass{}
var myClass=0; //Uncaught SyntaxError: Identifier 'myClass' has already been declared

答案 0 :(得分:1)
删除只会删除对象属性或全局变量。
答案 1 :(得分:1)
https://stackoverflow.com/a/44694753/461412
这个答案很有用。但并不完美。
我猜你在将它声明为标识符之后永远不会删除它,但你可以将它首先包装成一个可删除的变量。
我仍然在寻找更好的解决方案。我们的团队正在尝试构建一个可拆卸的模块系统。致命的,任何声明的类都不可拆卸。我们不喜欢转换我们加载的每个模块的想法。
答案 2 :(得分:0)
这是我使用的:
window.MyClass = class extends SuperClass {} // in an external file
// load the file into a script tag, append it to the body, and execute the following after it loads:
alert(MyClass); // Outputs the class
delete window.MyClass;
alert(MyClass); // Outputs Uncaught ReferenceError: MyClass is not defined
效果很好。使用这种方法,我可以使用脚本标签将.js文件导入到我的文档中,从window对象访问代码,然后删除脚本标签并删除对该类的引用。我没有对其进行太多测试,但是它可以用于为游戏中的单个关卡加载自定义逻辑,然后摆脱它,或者可能更有用。老实说,这样做实在太难了。
答案 3 :(得分:0)
这是我最能“删除”构造方法的
class MyClass {
constructor(a, b) {
this.a = a;
}
}
MyClass = null;
console.log( MyClass ); // -> null
var testObj = new MyClass_("val"); // -> TypeError
这不会删除构造函数,只是将“ MyClass”的值更改为null!
但是出于调试目的,
答案 4 :(得分:0)
我已为解决导入类的删除问题派遣了工人。
worker.js
onmessage = function(e) {
let v = JSON.parse(e.data)
...
import(`module.js?p=${v.query}`)
.then(module => {
let obj = new module.default(v.params)
...
postMessage(obj.result)
})
main.js
async function doInBackground(x,y, output) {
let r = await new Promise((resolve, reject) => {
let w = new Worker('worker.js')
w.postMessage(JSON.stringify({
"x" : x,
"y" : y
}))
w.onmessage = function(e) {
resolve(e.data)
delete w
}
w.onerror = reject
})
output.result = r
}