| var b = new Boolean(); |
| b.x = 11; |
| |
| with (b) { |
| f = function(a) { return a*x; } // remember scope chain |
| } |
| |
| shouldBe("f(2)", "22"); |
| |
| var OBJECT = new MyObject( "hello" ); |
| function MyObject(value) { |
| this.value = value; |
| this.toString = new Function( "return this.value+''" ); |
| return this; |
| } |
| shouldBe("OBJECT.toString()", "'hello'"); |
| var s; |
| with (OBJECT) { |
| s = toString(); |
| } |
| shouldBe("s", "'hello'"); |
| |
| |
| // Make sure that for ... in reevaluates the scoping every time! |
| P = { foo : 1, bar : 2, baz : 3 } |
| |
| function testForIn() { |
| for (g in P) { |
| eval("var g;") //Change the scope of g half-ways through the loop |
| } |
| } |
| |
| testForIn(); |
| shouldBe("g", "'foo'"); //Before the eval, g was in outer scope, but not after! |