Javascript - 使用没有函数的私有变量定义对象

时间:2014-05-13 21:15:28

标签: javascript

通常,您可以在定义函数时使用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变量?

4 个答案:

答案 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 Expressionsmodule pattern

var o = (function() {
    var x = '1dg5456awd32tr5';
    return {getX: function() {return private;}};
}());
o.getX();

答案 2 :(得分:0)

您知道,在JavaScript函数中对象。

由于JavaScript范围是有效的,因此通过在函数范围内声明局部变量来限制成员变量访问变得容易。最常见的是使用Facade PatternModule 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