refer to arborjs.org: javascript object closure