Codes in JSDeferred Cookbook is evaluated in browser as is. But I want output of console.log
to show in general. So I had to override console.log and do it with following solution:
Codes are all string so there are two way to evaluate it as JS: eval()
or new Function(code)()
. In this case, I use latter because I want to override console.log.
var code = ...; new Function('console', code)({ log : function (arg) { ... } });
I created a dummy console
object which has log
function and passed it into functioned demo code with arguments named console
. And then, all of console.log in code are belong to us.
This way has very high advantage for asynchronous code. If I use the way overriding original console.log and write back after doing, I must handling all asynchronous event.