JSFiddle - React, Tailwind, and code Playground
by Raynos
HTML
<script src="http://documentcloud.github.com/underscore/underscore.js"></script>
JavaScript
var Constructor = function() {
var data = 4;
var foobaz = 5;
this.o = 5;
this.getData = function() {
return data;
};
this.setData = function(val) {
data = val;
};
this.count = function() {
return foobaz++;
};
this.getO = function() {
return o;
};
};
Constructor.prototype.p = function() {
this.setData(this.getData() + 1);
return this.getData()
};
var readOnly = function(obj, publicData) {
var object = new obj.constructor;
_.each(object, function(val, key) {
delete object[key];
});
_.each(obj.constructor.prototype, function(val, key) {
object[key] = undefined;
if (_.isFunction(val)) {
_.bindAll(obj, [key]);
}
});
_.bindAll(obj, _.functions(obj));
_.each(publicData, function(val) {
object[val] = obj[val];
});
return object;
};
var c = new Constructor();
var o = readOnly(c, ["getData", "count", "getO", "p"]);
o.p();
console.log(o.p());
console.log(c.p());