Dit werkt uiteraard:
Maar nu wil ik een zooi functies runtime genereren, afhankelijk van user input (new Function(...)). Om te zorgen dat die niet global draaien en vanalles kunnen verzieken wil ik ze dus in een object duwen en daar laten draaien.
Ik heb de volgende constructie
probleem is nu dat foo() bar() aan moet roepen, maar die is nu niet meer bekend. Wat ik nu wil is niet de functies zelf aanpassen, want die volgen uit user input, maar de manier van aanroepen van foo(). Ik dacht dus in eerste instantie aan iets als:
maar dan kent ie bar() nog steeds niet omdat ie dat als globale functieaanroep blijft zien.
Hoe kan ik er voor zorgen dat bar() in foo() gezien wordt als locale aanroep? Dus als ware het this.bar()?
JavaScript:
1
2
3
4
5
6
7
8
| foo = function() { return bar(); } bar = function() { return 'something'; } window['foo'](); |
Maar nu wil ik een zooi functies runtime genereren, afhankelijk van user input (new Function(...)). Om te zorgen dat die niet global draaien en vanalles kunnen verzieken wil ik ze dus in een object duwen en daar laten draaien.
Ik heb de volgende constructie
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
| function Sandbox() { this.foo = function() { return bar(); } this.bar = function() { return 'something'; } } var s = new Sandbox() s['foo'](); |
probleem is nu dat foo() bar() aan moet roepen, maar die is nu niet meer bekend. Wat ik nu wil is niet de functies zelf aanpassen, want die volgen uit user input, maar de manier van aanroepen van foo(). Ik dacht dus in eerste instantie aan iets als:
JavaScript:
1
| s[foo].apply(s); |
maar dan kent ie bar() nog steeds niet omdat ie dat als globale functieaanroep blijft zien.
Hoe kan ik er voor zorgen dat bar() in foo() gezien wordt als locale aanroep? Dus als ware het this.bar()?