Skip to content

Instantly share code, notes, and snippets.

@ianmcgregor
Last active August 29, 2015 14:21
Show Gist options
  • Save ianmcgregor/c80592083b7168c9adc1 to your computer and use it in GitHub Desktop.
Save ianmcgregor/c80592083b7168c9adc1 to your computer and use it in GitHub Desktop.
JS object patterns
/* Revealing module */
function Module() {
var privateVar = '';
var publicFn = function() {
return privateVar;
};
return Object.freeze({
publicFn: publicFn
});
}
return Module;
/* Extend */
function Module() {
var privateVar = '';
var publicFn = function() {
return privateVar;
};
return Object.create(someObjectOrPrototype, {
publicFn: {
value: publicFn
},
privateVarAccess: {
get: function() {
return privateVar;
},
get: function(value) {
privateVar = value;
}
}
});
}
return Module;
/* Prototypical */
function Prototypical() {
}
Prototypical.prototype = {
};
return Prototypical;
/* 'Subclass' */
var SuperClass = require('subclass');
function SubClass() {
SuperClass.call(this);
//SuperClass.apply(this, arguments);
}
SubClass.prototype = Object.create(SuperClass.prototype);
SubClass.prototype.constructor = SubClass;
SubClass.prototype.foo = function() {
SuperClass.prototype.foo.call(this);
};
Object.defineProperty(SubClass.prototype, 'foo', {
get: function() {
return this.foo;
},
set: function(value) {
this.foo = value;
}
});
Object.defineProperties(SubClass.prototype, {
bar: {
value: ''
},
foo: {
get: function() {
return this.foo;
},
set: function(value) {
this.foo = value;
}
}
});
return SubClass;
/* Object literal */
var someObject = {
};
return someObject;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment