Javascript 我们可以删除ES6类吗?
我们真的可以删除es6“类”创建的类吗Javascript 我们可以删除ES6类吗?,javascript,class,ecmascript-6,Javascript,Class,Ecmascript 6,我们真的可以删除es6“类”创建的类吗 类myClass{} 删除myClass; console.log(myClass)//输出:类myClass{} var-myClass=0//未捕获的语法错误:已声明标识符“myClass”Delete将仅删除对象属性或全局变量 这个答案很有用。但并不完美 我想在它声明为标识符之后,您永远不能删除它,但是您可以首先将它包装成一个可删除的变量 我仍然在寻找更好的解决方案。我们的团队正在尝试构建一个可拆卸的模块系统。致命的,任何声明的类都是不可分离的。
类myClass{}
删除myClass;
console.log(myClass)//输出:类myClass{}
var-myClass=0//未捕获的语法错误:已声明标识符“myClass”
Delete将仅删除对象属性或全局变量
这个答案很有用。但并不完美
我想在它声明为标识符之后,您永远不能删除它,但是您可以首先将它包装成一个可删除的变量
我仍然在寻找更好的解决方案。我们的团队正在尝试构建一个可拆卸的模块系统。致命的,任何声明的类都是不可分离的。我们不喜欢传输我们加载的每个模块的想法
这是我使用的:
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文件导入到文档中,从窗口对象访问代码,然后删除脚本标记并删除对类的引用。我没有对它做太多的测试,但它可以用来为游戏中的一个关卡加载自定义逻辑,然后去掉它,或者做一些更有用的事情。老实说,这样做感觉真的很糟糕。这是我最接近“删除”构造函数的方法
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
}
您不能“删除”JavaScript中的任何内容。你到底想干什么?这段代码是在哪里找到的?其思想是取消定义您创建的类。例如,这对于调试可能很有用。因此,您可以将其设置为
undefined
,然后将其设置为null
,以进行垃圾收集。删除第二部分-您只能删除全局对象的属性,而不能删除所有全局变量。对于向下投票者,如果未使用var声明全局变量,则可以删除全局变量,如果使用var声明,那么它就不能。只需使用var X=class{}
那么?这个主题是关于当有人执行“class X{}”时,您可以做什么。