Skip to content

Instantly share code, notes, and snippets.

@jameswomack
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jameswomack/9462429 to your computer and use it in GitHub Desktop.
Save jameswomack/9462429 to your computer and use it in GitHub Desktop.
Power Constructors
const instanceCount = 2;
var IHaveThePower = function (passedInConfig) {
var config = JSON.parse(JSON.stringify(passedInConfig));
var okForPublic = {'foo':0, 'bar':0};
var exports = {};
function publicize(key) {
Object.defineProperty(exports, key, {
get: function () {
return config[key];
},
set: function (value) {
config[key] = value;
},
configurable: true
});
}
for(var key in okForPublic) {
publicize(key);
}
return exports;
};
var config = {
foo: 'Foo',
bar: 'Bar',
qux: 'Qux',
Quux:'Quux'
};
var instances = [];
for (var i = 0; i < instanceCount; i++) {
instances.push(new IHaveThePower(config));
}
config['foo'] = 'foo';
for (var i = 0; i < instanceCount; i++) {
var instance = instances[i];
console.log(instance.foo);
}
instances[1].foo = 'foo';
for (var i = 0; i < instanceCount; i++) {
var instance = instances[i];
console.log(instance.foo);
}
config['foo'] = 'Foo';
var IAlsoHaveIt = function (config) {
var exports = IHaveThePower.call(this, config);
Object.defineProperty(exports, 'foo', {
value: 'FOO',
writable: true
});
return exports;
};
var alsoInstances = [];
for (var i = 0; i < instanceCount; i++) {
alsoInstances.push(new IAlsoHaveIt(config));
}
alsoInstances[1].foo = false;
for (var i = 0; i < instanceCount; i++) {
var instance = alsoInstances[i];
console.log(instance.foo);
}
/*
Foo
Foo
Foo
foo
FOO
false
*/
const instanceCount = 4;
var IHaveThePower = function (passedInConfig) {
var config = JSON.parse(JSON.stringify(passedInConfig));
var okForPublic = {'foo':0, 'bar':0};
var exports = {};
exports.get = function (key) {
return (key in okForPublic) ? config[key] : null;
}
exports.set = function (key, value) {
(key in okForPublic) ? config[key] = value : void 0;
}
return exports;
};
var config = {
foo: 'Foo',
bar: 'Bar',
qux: 'Qux',
Quux:'Quux'
};
var instances = [];
for (var i = 0; i < instanceCount; i++) {
instances.push(new IHaveThePower(config));
}
config['foo'] = 'foo';
for (var i = 0; i < instanceCount; i++) {
var instance = instances[i];
console.log(instance.get('foo'));
}
instances[3].set('foo', 'foo');
for (var i = 0; i < instanceCount; i++) {
var instance = instances[i];
console.log(instance.get('foo'));
}
/*
Foo
Foo
Foo
Foo
Foo
Foo
Foo
foo
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment