【问题标题】:ONDELETE object event in javascriptjavascript中的ONDELETE对象事件
【发布时间】:2017-01-17 18:13:43
【问题描述】:

我有一个模态对象,它在创建时创建 DOM 元素。 我想知道每当用户在对象上调用“删除”时是否可以删除节点。比如:

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;

【问题讨论】:

  • 你不能,javascript没有析构函数。
  • WeakMap 对您有帮助吗?
  • 任何例子@JanDvorak ??
  • 您能解释一下您展示的课程的目的吗?是职责。我的问题是:“为什么在这种情况下你需要一个析构函数”,任何“也许有一个没有析构函数的解决方法”,但为此我必须了解上下文。而这个delete 有点让我恼火。它承诺没有好处。

标签: javascript object destructor


【解决方案1】:

delete 不会触发 onDeleteEvent ,delete 是一个操作符;

删除操作符从对象中删除一个属性。

你应该调用 ondelete 方法从 DOM 中删除元素。

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

JavaScript 会自动进行垃圾回收;只有当垃圾收集器决定运行并且对象符合条件时,才会回收对象的内存。

delete 操作符与直接释放内存无关(它只是通过中断引用间接地释放)。有关详细信息,请参阅memory management 页面)。

【讨论】:

  • delete操作符和直接释放内存没有关系严重o.O?感谢您的参考
【解决方案2】:

您可以这样解决它:
自己调用删除函数而不是删除运算符
(我编辑了代码以进行一些清理。)

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>

【讨论】:

  • 很好的例子。根据所有答案/参考资料,我们必须手动“破坏”它。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 2016-01-21
相关资源
最近更新 更多