Когда-то кто-то спрашивал, как сэмулировать оператор with:
function withEmu( object, f ) {
var argumentNamesArray = [],
argumentValuesArray = [],
newF;
for( var arg in object ) {
argumentNamesArray.push( arg );
argumentValuesArray.push( object[ arg ] );
}
argumentNamesArray.push( 'return (' + f + ')()' );
newF = Function.apply( null, argumentNamesArray );
return newF.apply( null, argumentValuesArray );
}
var x = withEmu( {a:1, b:2, c: 'blah'}, function() {
return [a,b,c];
});
alert( x );