JSFiddle - React, Tailwind, and code Playground
by btipling
JavaScript
function createPrivateVar(instance, proto) {
return Object.create(proto, {
apply: {
value: function(f) {
var r = [], i;
for (i = 1; i < arguments.length; i++) {
r[i-1] = arguments[i];
}
return f.apply(instance, r);
},
},
print: {
value: function () {
console.log(instance);
}
}
});
}
var Stack = (function() {
var privilegedInstanceMethods = {
push: function(x) {
this.apply(Array.prototype.push, x);
},
pop: function() {
return this.apply(Array.prototype.pop);
},
size: function() {
return this.apply(function () { return this.length; });
},
empty: function() {
return this.apply(function () { this.length = 0; });
},
};
var Stack = function () {
this.arr = createPrivateVar([], privilegedInstanceMethods);
};
return Stack;
}());
// works
var s1 = new Stack();
var s2 = new Stack();
s1.arr.push("s1a");
s1.arr.push("s1b");
s2.arr.push("s2a");
s2.arr.push("s2b");
s1.arr.print();
s2.arr.print();
console.log(s1.arr.pop()); // "s1b"
console.log(s1.arr.pop()); // "s1a"
console.log(s2.arr.pop()); // "s2b"
console.log(s2.arr.pop()); // "s1a"
console.log(s1.arr.pop()); // null