[英]What is the proper way of creating a new instance of a class onclick in JavaScript?
類示例:
$(document).ready(function(){
var $ = function(id)
{
return document.getElementById(id);
}
class someClass
{
constructor()
{
...
}
someMethod()
{
...
}
}
... // rest of examples within this scope
});
到目前為止,我能夠創建該類對象的實例,當窗口加載,然后調用這個類的方法上的一個按鈕點擊事件,同時還結合this
:
var obj = new someClass()
$('startButton').onclick = obj.someMethod.bind(obj)
一切正常,直到我想通過刪除和創建該類對象的新實例來重置。 我嘗試了幾種不同的方法:
首先,我嘗試在單擊按鈕時調用一個函數,該函數執行的任務比以前多(實例化一個新對象)。 我想這都與聲明變量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
中創建一個新方法來手動將我的所有類屬性重置回初始值(我寧願重新調用構造函數),我如何在按鈕單擊時優雅地實例化一個新類對象並能夠綁定this
?
當我這樣做時,是否可以重新分配保存類對象的變量而不先將其標記為 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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.