« Return to Thread: with and scope chain augmentation

Re: with and scope chain augmentation

by kangax :: Rate this Message:

Reply to Author | View in Thread


On Jun 23, 2009, at 5:18 PM, Jason Orendorff wrote:

On Mon, Jun 22, 2009 at 2:43 PM, Mike Wilson<mikewse@...> wrote:
I sympathize with the slide "Problem: Can't emulate
platform objects" (which is addressed by e g getter/setter
properties), but the removal of with(){} in ES5 strict mode
would mean it gets harder to emulate the scope chain
augmentation done by browsers?

Actually, I think we do this by wrapping event handlers in something like

(function (event) { ... })

so "with" is not involved.  In fact, surely everyone does something
like this, as event handlers have to support stuff like "return
false;".

Last time I checked, most of the browsers actually *still were augmenting scope* of event handlers as if by using "with". There's been some research on this subject first by Cornford, then by Garrett Smith. Most of it is documented at <http://jibbering.com/faq/names/event_handler.html>

In a nutshell, if one wanted to create a function object out of a string value of intrinsic event attribute, something along these lines would need to be used (for a more or less complete emulation):

function eventHandlerFromAttr(element, attrValue){
  return function(e){
    with(document){
      with(element){
        var fn = eval('(function(event){' + attrValue + '})');
        return fn.call(element, e);
      }
    }
  }
}

[...]

-- 
Juriy Zaytsev
Co-founder, BitSonnet, Corp.
Core developer, Prototype.js

_______________________________________________
es-discuss mailing list
es-discuss@...
https://mail.mozilla.org/listinfo/es-discuss

 « Return to Thread: with and scope chain augmentation