- Published on
RAMSON, part 2
- Authors
- Name
- Ian Atha
- @IanAtha
This post is the second part of the RAMSON series. Make sure you've read RAMSON, part 1.
As dicussed before, RAMSON is a JSON schema that serializes and deserializes JS/ECMAScript objects precisely as they were in memory.
For example, consider the following Javascript code:
var state = { foo: 1 };
var counter = 0;
function next_val() {
counter = counter + 1;
return counter;
}
var root = { state: state, next_val: next_val };
Let's focus on how to serialize the next_val
function. A Javascript function is comprised of its source code, along with its scope.
Scope is the collection of variables defined in a function, along with a reference to its enclosing scope, the scope of the function's parent function scope. The enclosing scope is referenced even if the parent function has returned. A top-level function's enclosing scope is the of its module.
Assume we could access each function's scope, through a function's $$scope
property. To properly chain enclosing scopes, we could utilize prototype
.
So in the aforementioned example,
next_val.$$scope
would be empty, sincenext_val
doesn't define any variables,next_val.$$scope.prototype
would containcounter
, andstate
, andnext_val.$$scope.prototype.prototype
would beundefined
.