从构造函数中正确破坏JavaScript中的对象

时间:2012-05-02 12:32:23

标签: javascript object constructor destroy

我的问题示例:

/**
 * @constructor
 */
function Marker(opts) {
    opts = opts || {};
    this.text = opts.text || 'Hello!';
    this.node = null;
    this.init();
};

Marker.prototype = {
    init: function() {
        this.node = document.createElement('div');
        this.node.innerHTML = this.text;
        document.body.appendChild(this.node);
    },
    destroy: function() {
        if ( this.node && this.node.parentNode )
            this.node.parentNode.removeChild(this.node);

        for (var i in this)
            if ( this.hasOwnProperty(i) )
                delete this[i];

        // this.constructor = null; // :-(
        // this = null; // :-(
        // H O W ?
    }
};

var first = new Marker({ text: 'first' });

alert( first instanceof Marker );
first.destroy();
alert( first instanceof Marker ); // want false

如果我想在第二个消息框中看到false,我该如何更新方法.destroy()? 解决方案必须是croossbrowsing,而不使用 proto

1 个答案:

答案 0 :(得分:0)

没有办法用null替换它,但是你可以添加销毁到原型的字段并按功能检查退出:Marker.prototype.exist=function(){ !this.destroyed; }

destroy=function(){
  ...
  this.destroyed=true;
}