// рабочий результат
var invoke = function(fn){
var str = 'var test = \'sss\';';
alert(fn)
var fnxt = new Function(str+fn);
fnxt();
}
var tester = 'alert(test);'
invoke(tester);
// желательный результат
var invoke_real = function(fn){
var test = 'sss';
alert(fn)
// дальше, само собой -- не работает, т.к. test отсутствует для scope tester_real'a
fn();
}
var tester_real = function(){ alert(test); }
invoke_real(tester_real);
* This source code was highlighted with Source Code Highlighter.
var invoke_real =
{
real: function(fn)
{
this.test = 'sss';
fn(this);
this.f();
}
};
var tester_real = function(ctx){ctx.f = function() {alert(this.test);};};
invoke_real.real(tester_real);
var invoker = {
init : function(fn){
invoker.arr[fn] = window[fn];
window[fn] = function(){
var test = 'sss';
alert('+1 '+test)
invoker.arr[fn]();
};
}
, del : function(fn){
window[fn] = invoker.arr[fn];
delete invoker.arr[fn];
}
, arr : []
}
var tester = function(){ alert(222); try{ alert(test); }catch(e){ alert(e); /* ref err */ } }
invoker.init('tester');
alert(111);
tester();
alert(333);
invoker.del('tester');
tester();
* This source code was highlighted with Source Code Highlighter.