function methods(name) { function getName(self) { return name; } function setName(self, newName) { name = newName; } return function (methodName) { switch (methodName) { case 'name': return getName; case 'name=': return setName; } }; } //initialize new object with 'Dave' as `name` argument var dave = objMaker(methods, ['Dave']); log(dave('name')()); //=> 'Dave' dave('name=')('David'); log(dave('name')()); //=> 'David'