2016-09-09 93 views
-1

我有一個模式對象,當它創建時創建DOM元素。 我想知道是否有可能在用戶調用對象的「刪除」時刪除節點。例如:在javascript中的ONDELETE對象事件

var modal = function (options) { 
    var domHolder = null; 

    function build() { 
     domHolder = document.createElement("div"); 
     //construct a modal window inside the element... 
    }; 

    this.ondelete = function() { 
     domHolder.parentNode.removeChild(domHolder); 
    } 

    build(); 
}; 

//destruct the object and remove the nodes 
var myModal = new modal(); 
delete myModal; 
+4

你不能,JavaScript沒有析構函數。 – jcubic

+0

'WeakMap'會幫助你嗎? –

+0

任何示例@JanDvorak ?? – CarlosCarucce

回答

1

delete不會觸發onDeleteEvent,delete是一個操作符;

刪除操作刪除對象的屬性。

你應該調用ondelete方法從DOM中刪除元素。

var myModal = new modal(); 
myModal.ondelete() ; 

JavaScript自動垃圾收集;只有Garbage Collectior決定運行並且該對象符合該條件時,該對象的內存纔會被回收。

刪除操作符與直接釋放內存無關(它只通過斷開引用間接進行)。有關更多詳細信息,請參閱memory management頁面)。

+0

_刪除操作符與直接釋放memory_嚴重o.O無關?感謝您的參考 – CarlosCarucce

1

你可以解決這個問題是這樣的:(我編輯的代碼做一些清理工作)
調用刪除功能你自己,而不是delete運算符

var modal = function (options) { 
 
    var domHolder = null; 
 

 
    function build() { 
 
     domHolder = document.createElement("div"); 
 
     domHolder.innerHTML = "yes"; 
 
     document.getElementById("test").appendChild(domHolder); 
 
    }; 
 

 
    this.delete = function() { 
 
     domHolder.parentNode.removeChild(domHolder); 
 
     delete domHolder; 
 
     // delete ... other objectsthat can be released, ... 
 
     // ... so that the instance can be garbage collected 
 
    } 
 

 
    build(); 
 
}; 
 

 
//destruct the object and remove the nodes 
 
var myModal = new modal(); 
 
document.getElementById("clear").addEventListener("click", function(){ 
 
    myModal.delete(); 
 
})
<div id="test"> 
 
</div> 
 
<button id="clear">delete</button>

+1

很好的例子。根據所有答案/參考資料,我們必須手動「毀滅」它。 – CarlosCarucce