javascript:在索引期间对对象调用哪些函数?

javascript:在索引期间对对象调用哪些函数?,javascript,indexing,for-loop,mshtml,Javascript,Indexing,For Loop,Mshtml,这可能是一个措辞拙劣的问题,但考虑到以下片段: var foo = { bar : 1 }; var bar = foo['bar']; 当索引到foo时,实际调用了哪些函数?类似地,如果您有以下代码: var foo = { bar : 1 }; for(var x in foo) dosomething(); 在for语句中实际调用foo上的哪些函数?假设我想为给定对象更改这两种场景的行为,我将如何做到这一点 更具体地说,我实际做的是将一个.net对象传递到一个MSHTML文档中(

这可能是一个措辞拙劣的问题,但考虑到以下片段:

var foo = { bar : 1 };
var bar = foo['bar'];
当索引到foo时,实际调用了哪些函数?类似地,如果您有以下代码:

var foo = { bar : 1 };
for(var x in foo)
   dosomething();
在for语句中实际调用foo上的哪些函数?假设我想为给定对象更改这两种场景的行为,我将如何做到这一点


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

听起来好像你在寻找像PHP中那样的神奇的getter和setter。
约翰·雷斯格对此表示担忧。但它并不适用于所有平台。

第一部分的答案是创建自己的PropertyInfo对象,该对象以集合中项目的索引命名,并返回它们。但是,我仍然没有弄清楚如何与中的for..兼容。

在对象的属性查找中没有调用JavaScript函数。你是在问特定JS解释器的具体实现方法吗?我希望你不会这么说。我可能会要求实现特定的方法,但我希望这些操作有相应的函数。那会很方便的。然后我想我真正的问题是如何为DirectReflect对象建立索引…结果是你必须在clr对象上创建“val”属性!我希望调用InvokeMember会给我某种类型的索引器调用,但实际上它将索引转换为对属性的调用。。。仍然在试图弄清楚for.Ugh中的枚举,刚刚意识到数组具有名为0、1、2的属性。。。这些不是clr对象的合法属性名,所以这可能很棘手。如果您需要更多类似的自定义内容,最好实现一个自己的类(哈希或其他),并提供一些很好的方法(myHash.each)进行迭代/等等。我认为这一概念非常类似。我认为IReflect的用途非常相似,只是用于clr对象。