Use of Delegate or funciton wrapper
by Douglas Enas
JavaScript
function Delegate(Target, TargetMember)
{
//Create an array of extra parameters
var PresetParams = new Array();
for (var i = 2; i < arguments.length; i++)
PresetParams[i - 2] = arguments[i];
//Create our return value
return function ()
{
//Create an array of params
var Params = new Array(arguments.length);
for (var i = 0; i < arguments.length; i++)
Params[i] = arguments[i];
//Call it
return TargetMember.apply(Target, PresetParams.concat(Params));
}
}
var TestObj = function (value)
{
//$.extend(this, BaseObject);
// public var
this._value = value;
};
TestObj.prototype = function()
{
// these are private
_giveMe = function () {
return this._value;
},
_callMeLaterTestObj = function () {
console.log('I am ' + this.constructor.name + ' my value is ' + this._value);
};
// public API
return {
GiveMe : _giveMe,
CallMeLaterTestObj : _callMeLaterTestObj
}
}();
function CallMeLater(v, i)
{
setTimeout(function () { v.CallMeLaterTestObj() }, 10);
// or
setTimeout(Delegate(v, v.CallMeLaterTestObj), 10);
}
var V1 = new TestObj(1);
var V2 = new TestObj(2);
var V3 = new TestObj(3);
console.log('V1= ' + V1.GiveMe());
console.log('V2= ' + V2.GiveMe());
console.log('V3= ' + V3.GiveMe());
console.log('---');
V1.CallMeLaterTestObj();
console.log('---');
CallMeLater(V1, 1);
CallMeLater(V2, 2);
CallMeLater(V3, 3);