在 JavaScript 中创建 class onclick 的新实例的正确方法是什么?

What is the proper way of creating a new instance of a class onclick in JavaScript?

Class 示例:

$(document).ready(function(){

    var $ = function(id)
    {
        return document.getElementById(id);
    }

    class someClass
    {
        constructor()
        {
            ...
        }
        someMethod()
        {
            ...
        }
    }
... // rest of examples within this scope
});

到目前为止,我能够在 window 加载时创建 class 对象的实例,然后在按钮单击事件 [=38] 上调用该 class 的方法=] 同时 绑定 this:

var obj = new someClass()
$('startButton').onclick = obj.someMethod.bind(obj)

一切正常,直到我想通过删除和创建该 class 对象的新实例来重置。我尝试了几种不同的方法:

首先,我尝试在单击按钮时调用一个函数,该函数比以前多执行一项任务(实例化一个新对象)。我尝试过在全局范围内声明变量 obj,为类型指定 var 并将其分配给 null,然后尝试重新分配它并绑定 this 点击按钮。这一直有效,直到我尝试调用我的 setup() 方法:

$('startButton').onclick = function() {
    var obj = new someClass();
    var obj.setup.bind(obj); // fails to call
}

然后我尝试了另一条路线,这或多或少让我落在了同一个地方:

$('startButton').addEventListener('click', function(event) {
    var obj = new someClass();
    console.log('obj is an instance of someClass?', obj instanceof someClass); // returns true
    obj.setup.bind(obj); // fails to call
});

如果不在 someClass 中创建一个新方法来手动将我的所有 class 属性重置回初始值(我宁愿重新调用构造函数),我如何优雅地实例化单击按钮上的新 class 对象 能够绑定 this?

当我这样做时,是否可以重新分配保存 class 对象的变量而不首先将其标记为 GC 或以某种方式释放它?没有其他引用它。如果我的术语不正确,请提前致歉,我是新手。

obj.setup.bind(obj) 将上下文绑定到函数,但不会调用它。您要么需要调用它:

obj.setup.bind(obj)();

或使用.call()代替.bind()

obj.setup.call(obj);

但是在这种情况下,因为您直接在实例上调用方法,所以实际上不需要绑定任何东西:

$(document).ready(function() {
  var $ = document.getElementById.bind(document); // <-- bind without calling
  
  class someClass {
    constructor() {
      this.ready = false;
    }
    setup() {
      this.ready = true;
    }
  }

  $('startButton').addEventListener('click', function(event) {
      var obj = new someClass();
      obj.setup();
      console.log(obj.ready); // true
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button id="startButton">Start</button>