Hello all -

I wanted to bring up one point for discussion. Based upon Mozilla's 
implementation of Array generics (and what will, presumably, be standardized 
here) you can see that typically doing:

  Array.forEach(null, function(){alert(arguments);});

produces no alerts. However, performing it in a page that has an iframe will
cause it to loop over all the iframes in the page, as in this test case:

  http://ejohn.org/files/bugs/foreach/

The issue here is that Array.forEach(null, ...) maps to 
Array.prototype.forEach.call(null, ...) - and doing a .call() on a function 
produces the global object (which, in a browser like Firefox, is equivalent to 
window.frames - looping over the iframes on the page).

Obviously this issue extends beyond browsers, or this specific situation, since 
this could occur in any situation where the global object has a length property.

It seems like there could be a couple solutions:
 - Make .call(null) not map to .call(global). I know that the Caja guys have 
argued this in the past - where does this stand?
 - Make .forEach(null) do nothing (it's not an object, therefore there's 
nothing to loop over).
 - Make .forEach(null) throw an exception.

For reference here's the Mozilla bug on the matter:
https://bugzilla.mozilla.org/show_bug.cgi?id=424411

--John
_______________________________________________
Es4-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es4-discuss

Reply via email to