通常,您可以在定义函数时使用var x
而不是this.x
创建私有变量,然后创建如下对象:var o = new SomeClass()
。但是,我需要类似PHP类的静态方法(具有私有变量的对象,无需进一步分配)。与定义类相同,然后从中创建对象,但直接定义对象,同时仍保持私有变量。有可能吗?
<小时/> 编辑: 正常的私有变量定义:
function SomeClass() {
var x = '1dg5456awd32tr5';
this.getX = function() {return private;}
}
var o = new SomeClass();
o.getX();
如何在不使用函数的情况下保存x变量?
答案 0 :(得分:2)
我不知道我是否正确理解了您的问题,但您可以通过创建以下内容来利用javascript范围行为:http://jsfiddle.net/2R8yY/
var Order = (function(){
var company = 'ACME';
var klassOrder = function(){};
klassOrder.getCompany = function(){
return company;
}
return klassOrder;
})();
console.log(Order.getCompany()); // -> ACME
答案 1 :(得分:1)
局部变量范围的隐私不限于构造函数。但是,您始终需要调用函数来创建“私有”范围 - 即使该函数未分配给任何标识符。
您似乎在寻找Immediately-Executed Function Expressions或module pattern。
var o = (function() {
var x = '1dg5456awd32tr5';
return {getX: function() {return private;}};
}());
o.getX();
答案 2 :(得分:0)
您知道,在JavaScript函数中是对象。
由于JavaScript范围是有效的,因此通过在函数范围内声明局部变量来限制成员变量访问变得容易。最常见的是使用Facade Pattern或Module Pattern。
答案 3 :(得分:0)
你在找这样的东西吗?
var SomeClass = (function(myPrivateThingy) {
var privateInt = myPrivateThingy;
return function() {
this.getInt = function() { return privateInt; }
}
}());
var instance = new SomeClass(99);
// instance.getInt() === 99