我想知道如何通过 clojure 在 javascript 中创建私有(private)变量。但在使用Object.create时仍然克隆它们。
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
我从 http://ejohn.org/blog/ecmascript-5-objects-and-properties/ 得到了这个技术但它有一个限制,即所有对象上的闭包变量都是相同的。我知道 javascript 上的这种行为是应该的,但是我如何创建真正的私有(private)变量?
最佳答案
I know this behaviour on javascript is supposed but how can I create true private variables?
不能,ES5 中没有 private。如果需要,您可以使用 ES6 私有(private)名称。
您可以使用 ES6 WeakMap 来模拟 ES6 私有(private)名称,这些名称可以在 ES5 中进行填充。这是一个昂贵且丑陋的仿真,不值得付出代价。
关于Javascript私有(private)变量+Object.create(引用闭包变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067055/