我们真的可以删除由ES6 "class"创建的类吗?
class myClass{}
delete myClass;
console.log(myClass); //output: class myClass{}
var myClass=0; //Uncaught SyntaxError: Identifier 'myClass' has already been declared
我们真的可以删除由ES6 "class"创建的类吗?
class myClass{}
delete myClass;
console.log(myClass); //output: class myClass{}
var myClass=0; //Uncaught SyntaxError: Identifier 'myClass' has already been declared
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对象访问代码,然后删除脚本标签并移除对类的引用。我没有对它进行过多的测试,但它可以用于加载游戏中单个级别的自定义逻辑,然后将其清除,或者可能更有用的其他内容。老实说,这样做感觉很不正规。
https://dev59.com/gp3ha4cB1Zd3GeqPQCy-#44694753
这个答案有用,但并不完美。var X = class {}
吗? - Bergi这是我能找到的最接近“删除”构造函数的方法
class MyClass {
constructor(a, b) {
this.a = a;
}
}
MyClass = null;
console.log( MyClass ); // -> null
var testObj = new MyClass_("val"); // -> TypeError
这并不会删除构造函数,它只是将"MyClass"的值更改为null!
但出于调试目的,这样做就足够了。
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
}
undefined
,然后设置为null
进行垃圾回收。 - Leo