0

我的问题示例:

/**
 * @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

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

4

1 回答 1

0

没有办法用 null 替换它,但您可以将字段销毁添加到原型并检查函数是否存在:Marker.prototype.exist=function(){ !this.destroyed; }

destroy=function(){
  ...
  this.destroyed=true;
}
于 2012-05-02T12:47:45.773 回答