【问题标题】:Know when a property has been set to an object using array notation知道何时使用数组表示法将属性设置为对象
【发布时间】:2011-07-01 19:10:09
【问题描述】:

我有一个对象用作哈希表,用于在 javascript 中存储键值对:

Storage["key"] = "value".

我发现我们可以使用 defineSetter 为每个键设置设置器,但是,我们需要事先知道所有键名。每当以这种方式设置值时,是否有办法做某事?

例如,当这样做时:

Storage["key"] = "value";

我希望它由自定义方法处理,例如:

customMethod : function(aKey, aValue) {
  //do something with these two params
  // inform somebody else about this.
}

想法/建议?

【问题讨论】:

  • 嗯...是的,使用这样的setValueForKey 方法将是唯一的方法。虽然它不是真正的二传手......你现在有什么问题?
  • 是的。我想为此继续使用数组表示法,以避免重构大量代码。 Safari 中的 HTML5 localStorage 存在一个错误,我想通过尽可能少的更改来解决它。
  • 我想我明白了......不幸的是,这样的事情在 JavaScript 中是不可能的。

标签: javascript arrays object setter


【解决方案1】:

不,目前没有办法捕获所有属性分配。 Firefox 4 引入了一个实验性的JavaScript Proxy API,它允许您执行此操作(让代理转发所有对内部对象的调用,但在设置属性时也会触发一些额外的操作)但在这里可能会有点矫枉过正——即使这个 API稳定并在其他浏览器中实现。

【讨论】:

    【解决方案2】:

    您可以覆盖对象的__defineSetter__ 以获得更精细的控制。警告:不适用于所有浏览器!

    查看这篇文章了解更多详情:John Resig: JavaScript Getters and Setters

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-25
      • 2015-04-27
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      相关资源
      最近更新 更多