2012-07-03 77 views

回答

0

你不能覆蓋刪除操作,所以除了定期檢查一個屬性是否還在這裏,我認爲你不能這樣做。

2

是的,這是可能的。就像您可以使用setter/getters來獲取屬性一樣,您可以使用對象屬性的「deleter」函數。

function myFunc() {} 
myFunc.prototype = { 
    constructor: myFunc, 

    deleteProp: function(prop) { 
     delete this[ prop ]; 
    } 
}; 

deleteProp方法中,你可以做任何事情之前和之後。

+0

我很好奇你爲什麼要替換默認的原型對象。爲什麼不只是添加新的方法,例如'myFunc.prototype.deleteProp = function(){...}'?您不必重置構造函數屬性。 – RobG

+0

@RobG只是一種習慣:-)但是,對於只有一個屬性,使用'myFunc.prototype.deleteProp'就足夠了 –

+0

這並不是真的「檢測」刪除,即。檢測對「刪除obj.prop;」的調用 - 相反,它提供了一個可以調用的包裝器。這可能會有所幫助,但並不完全符合要求。 – Venryx

1

您可以使用hasOwnPropertypropertyIsEnumerable檢查對象本身是否存在屬性,但本身不會告訴您屬性是否曾經存在並隨後被刪除。您可以測試自己和繼承的屬性是否具有使用值:

if (typeof obj.prop != 'undefined') 

但物業是否存在不告訴你,只有whehter已分配以外的值比不確定。請注意,如果該屬性已創建但未分配屬性,它仍將返回未定義。對於大多數目的而言,這就足夠了。

你想用這個做什麼?在ES5中,您可以使用Object.createObject.defineProperty創建不可刪除的屬性,但某些瀏覽器缺少支持,因此不適用於常規網絡。