我創建了一個類來在我的一個網頁上保存一個接口組件。有一個add
按鈕來實例化類並將新元素插入到DOM中。我想給這個類一個remove
方法從dom中刪除元素,然後銷燬這個實例。在mootools中刪除它?
我有這樣的:
// can have multiple tags
var Tag = new Class({
Implements: [Options, Events],
this.targetElement: undefined,
this.tagName: undefined
initialize: function() {
this.targetElement = new Element('input', { class: 'tag' });
this.targetElement.inject($('tagHolder'));
...
// event handler to set `this.tagName` to contents of the input
...
if (Tag.tags === undefined)
Tag.tags = [];
Tag.tags.push(this);
},
remove: function() {
this.targetElement.destroy();
delete this;
}
這將刪除DOM元素,但不刪除實例對象。
我想用數組tag.tags
以訪問用戶已創建的所有變量,因此,如果用戶刪除一個標籤,我想從數組中刪除該標籤,或設置爲undefined
,或類似。由於不再需要標記實例,因此在此時刪除/爲GC準備對象是有意義的,這樣內存不會被浪費。
我應該怎麼做,或者這是一個愚蠢的方法?有沒有更好的辦法?
您只能在'對象delete'性質,所以'刪除this'是永遠不可能的。你在哪裏定義'Tag'變量?如果它是一個全局變量,那麼'delete window.Tag'就可以做到這一點,因爲全局變量是'window'的自動屬性。 – pimvdb 2012-02-21 13:10:26
@pimvdb新實例來自'click'事件:'$$('。addTag')。addEvent('click',function(){new Tag()});'我沒有任何句柄除了通過Tag.tags之外的其他實例。 – Oliver 2012-02-21 13:15:35
然後我猜你已經不走運了。以這種方式來看 - 對象可以存儲在多個變量中,因此對象和「其變量」之間不存在一對一的關係。無論如何,你想在這個例子中刪除什麼? – pimvdb 2012-02-21 13:18:41