Ich fragte mich, wie ich private Variablen in JavaScript durch clojure machen konnte. Aber lassen Sie sie immer noch klonen, wenn Sie Object.create verwenden.Javascript private Variablen + Object.create (Verweis auf Closure-Variablen)
var point = {};
(function(){
var x, y;
x = 0;
y = 0;
Object.defineProperties(point, {
"x": {
set: function (value) {
x = value;
},
get: function() {
return x;
}
},
"y": {
set: function (value) {
y = value;
},
get: function() {
return y;
}
}
});
}());
var p1 = Object.create(point);
p1.x = 100;
console.log(p1.x); // = 100
var p2 = Object.create(point);
p2.x = 200;
console.log(p2.x); //= 200
console.log(p1.x); //= 200
Ich habe diese Technik aus http://ejohn.org/blog/ecmascript-5-objects-and-properties/ aber es hat diese Einschränkung, dass die Schließung Variablen das gleiche für alle Objekte ist. Ich weiß, dass dieses Verhalten auf Javascript angenommen wird, aber wie kann ich echte private Variablen erstellen?
dieser Code sieht automatisch generiert, wurde es von Clojure Code generiert getestet? – Raynos
Nein, es war nicht, warum glaubst du, es sieht automatisch generiert aus? – automaticoo
Als Alternative ohne private Variablen könnte http://jsfiddle.net/heera/G9E9m/ –