Functions as Pointers
by plus5keen
JavaScript
(function definePtr(global) {
var e = {};
var create = e.create = function(init) {
var value = init;
var result = function(cb) {
var result;
if (typeof cb === 'function') {
result = cb(value);
if (result !== void 0) {
value = result;
}
}
return value;
};
result.set = function (newValue) {
return value = newValue;
};
result.prop = function(key) {
return create(value[key]);
};
result.link = function(key) {
return function(cb) {
var result;
if (typeof cb === 'function') {
result = cb(value);
}
if (result !== void 0) {
value = result;
}
return value[key];
};
};
return result;
};
global.ptr = e;
}(this));
(function test() {
function meddle(prev, curr) {
console.log('prev: ', prev());
console.log('curr: ', curr());
var cx = curr.prop('x');
var cy = curr.prop('y');
console.log('curr.x: ', cx());
console.log('curr.y: ', cy());
console.log('assigning curr value to prev using prev(curr)');
prev(curr);
console.log('prev: ', prev());
console.log('curr: ', curr());
}
function testPtr(ptr) {
var i, ptrs = [];
console.log('populating');
for (i = 0; i < 10; i++) {
ptrs.push(ptr.create({
x: 10 * i,
y: 100 - 10 * i
}));
}
console.log('meddling');
for (i = 1; i < 10; i++) {
console.log('i: ', i);
meddle(ptrs[i - 1], ptrs[i]);
}
}
testPtr(this.ptr);
}());