JavaScript:检测对象属性删除

时间:2012-07-03 06:09:24

标签: javascript

有没有办法检测对象属性删除?

4 个答案:

答案 0 :(得分:2)

是的,有可能。正如您可以对属性使用setter / getters一样,您可以对对象属性使用“删除”功能。

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

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

deleteProp方法中,您可以在之前和之后执行任何操作。

答案 1 :(得分:1)

您可以使用hasOwnPropertypropertyIsEnumerable来检查对象本身是否存在属性,但这本身不会告诉您该属性是否曾经存在并且随后被删除。您可以使用以下命令测试自有属性和继承属性是否具有值:

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

但这并不告诉您该属性是否存在,只是为其分配了 undefined 以外的值。请注意,如果已创建属性但未分配属性,则仍将返回 undefined 。在大多数情况下,这已经足够了。

你想用它做什么?在ES5中,您可以使用Object.createObject.defineProperty创建不可删除的属性,但某些浏览器缺少支持,因此不适合常规网络。

答案 2 :(得分:0)

你不能覆盖删除操作符,所以除了定期检查属性是否还在这里之外,我认为你不能这样做。

答案 3 :(得分:0)

那ES6代理呢? (MDN为参考,stackoverflow为简单)

文档明确指出,您可以为“ deleteProperty” ...添加“陷阱” ...或简单地说-“监听” 到从特定对象中删除属性(对救援而言MDN

const myObject = { say: 'hello', to: 'proxy' }
const proxyHandler = {
  deleteProperty(target, prop) {
    if (prop in target) {
      delete target[prop]
      console.log(`property removed: ${prop}`)
    }
  }
}
const proxy = new Proxy(myObject, proxyHandler)
delete proxy.to
console.log(myObject)

另外,请检查Can I Use浏览器的可比性

干杯!