Scope testing
Testing variable scopes and sharing scopes between obects/functions
by SmokeyPHP
HTML
<pre id="console"></pre>
CSS
#console {
width: 90%;
margin: 0 auto;
border: 2px dotted #CCC;
background: #444;
color: #EFEFEF;
padding: 5px;
}
JavaScript
(function() {
var objCount = function(obj) {
var c = 0;
for(var i in obj)
{
if(obj.hasOwnProperty(i)) c++;
}
return c;
}
var FuncBuilder = {
build: function(name,func) {
return new FuncBuilder._build(name,func);
}
,_build: function(func,name) {
this.name = name || 'unnamed function';
this.func = func;
this.vars = {};
this.setVar = function(varname,myvar) {
this.vars[varname] = myvar;
}
this.shareVar = function(varname,myvar) {
this.vars[varname] = myvar;
}
this.shareVars = function(vars) {
for(var i in vars)
{
if(vars.hasOwnProperty(i))
{
this.vars[i] = vars[i];
}
}
}
var self = this;
this.exec = function() {
pageConsole.log('calling "'+this.name+'"');
if(objCount(this.vars) > 0)
{
var funcStr = this.func.toString();
var args = funcStr.match(/\(([^)}]*)\)/)[1];
funcStr = funcStr.substr(funcStr.indexOf('{')+1).replace(/\}.*$/,'');
var evStr = 'var newFunc = new Function("'+args.replace(/,/g,'"')+'",';
var passArgs = [];
for(var i in arguments)
{
passArgs.push(arguments[i]);
}
for(var i in this.vars)
{
if(this.vars.hasOwnProperty(i))
{
passArgs.push(this.vars[i]);
evStr += '"'+i+'",';
}
}
evStr +=...