【问题标题】:javascript: which functions are called on an object during indexing?javascript:索引期间在对象上调用了哪些函数?
【发布时间】:2011-01-02 16:41:52
【问题描述】:

这可能是一个措辞不佳的问题,但考虑到这个 sn-p:

var foo = { bar : 1 };
var bar = foo['bar'];

索引 foo 时实际调用了哪些函数?同样,如果您有以下代码会怎样:

var foo = { bar : 1 };
for(var x in foo)
   dosomething();

foo 上的哪些函数实际上会在 for 语句中被调用?假设我想为给定对象更改这两种场景的行为,我该怎么做?

更具体地说,我实际上正在做的是将 .net 对象传递给 MSHTML 文档(上面的 foo 将是现实中的对象),该对象实现 IReflect 并在索引调用期间(如上面的场景 1)调用到 GetProperties 和 GetFields。我需要知道它在寻找哪个属性,这样我才能实现它并让它调用我的对象。

【问题讨论】:

  • 在对象的属性查找中没有调用 JavaScript 函数。您是在询问特定 JS 解释器的实现特定方法吗?
  • 我希望你不要这么说。我可能会要求实现特定的方法,但我希望这些操作有相应的功能。那会很方便。然后我想我真正的问题是如何为 IReflect 对象建立索引...
  • 原来你必须在 clr 对象上实际创建 'val' 属性!我期待对 InvokeMember 的调用会给我某种类型的索引器调用,但它实际上是将索引转换为对属性的调用......但仍在试图找出在 for 中的枚举。
  • 呃,刚刚意识到一个数组具有名为 0、1、2... 的属性,它们不是 clr 对象的合法属性名称,所以这可能很棘手。
  • 如果您需要更多这样的自定义内容,您最好实现自己的类(哈希或其他东西)并提供一些不错的方法(myHash.each)来迭代/等。跨度>

标签: javascript indexing for-loop mshtml


【解决方案1】:

听起来好像您正在寻找像 PHP 一样的魔法 getter 和 setter。 John Resig wrote an article 关于这一点。但它并不适用于所有平台。

【讨论】:

  • 我认为这个概念非常相似。我认为 IReflect 的用途非常相似,但用于 clr 对象。
【解决方案2】:

第一部分的答案是创建您自己的 PropertyInfo 对象,该对象以您集合中项目的索引命名并返回它们。不过我还没想好怎么兼容for..in。

【讨论】:

    猜你喜欢
    • 2012-04-09
    • 1970-01-01
    • 2014-08-28
    • 2011-06-15
    • 1970-01-01
    • 2016-04-06
    • 2014-03-08
    • 2011-09-15
    • 2011-08-20
    相关资源
    最近更新 更多