Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我们可以删除ES6类吗?_Javascript_Class_Ecmascript 6 - Fatal编程技术网

Javascript 我们可以删除ES6类吗?

Javascript 我们可以删除ES6类吗?,javascript,class,ecmascript-6,Javascript,Class,Ecmascript 6,我们真的可以删除es6“类”创建的类吗 类myClass{} 删除myClass; console.log(myClass)//输出:类myClass{} var-myClass=0//未捕获的语法错误:已声明标识符“myClass”Delete将仅删除对象属性或全局变量 这个答案很有用。但并不完美 我想在它声明为标识符之后,您永远不能删除它,但是您可以首先将它包装成一个可删除的变量 我仍然在寻找更好的解决方案。我们的团队正在尝试构建一个可拆卸的模块系统。致命的,任何声明的类都是不可分离的。

我们真的可以删除es6“类”创建的类吗

类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{}”时,您可以做什么。