如何在javascript类中定义一个可以跨实例使用的公共变量?

时间:2010-01-14 17:04:16

标签: javascript class

我想定义在Class定义中的所有实例中使用的单个变量(它是jQuery插件中的普通函数构造函数)。

有这样的功能吗?

如果有,只需一个简单的演示,我想我会理解。

4 个答案:

答案 0 :(得分:2)

您正在寻找的内容基本上是private staticprotected static变量,不能在javascript(我知道)中100%模拟。

但您可以public staticprivate

tehMick的解决方案为您public static提供了一些方便的设置者/获取者,但与用y.setB(2)替换A.b = 2的情况完全没有区别。

以下是私有变量的工作方式,但要了解这仍然是每个实例变量,并且只通过getter反映相同的值,因为每个实例都将它设置为相同的文字字符串。 / p>

function SomeClass()
{
  var privateVariable = 'foo';
  this.publicVariable = 'bar';

  this.getPrivateVariable = function()
  {
    return privateVariable;
  }

  this.setPrivateVariable = function( value )
  {
    privateVariable = value;
  }
}
SomeClass.staticVariable = 'baz';

var a = new SomeClass();
var b = new SomeClass();

// Works...
alert( a.getPrivateVariable() );
alert( b.getPrivateVariable() );

// Until we try to set it...
a.setPrivateVariable( 'hello' );

// Then it breaks
alert( a.getPrivateVariable() );
alert( b.getPrivateVariable() );

答案 1 :(得分:1)

Javascript并不真正提供这种数据隐藏,但这可能适合您的目的:

function A()
{
    if (!A.b) A.b = 1;//shared
    //this.b = 0;//not shared
}
A.prototype.getB = function()
{
    return A.b;//shared
    //return this.b;//not shared
}
A.prototype.setB = function(value)
{
    A.b = value;//shared
    //this.b = value//not shared
}
function load()
{
    var x = new A();
    var y = new A();
    y.setB(2);
    document.body.innerHTML += x.getB();
}

输出:2

答案 2 :(得分:0)

你的问题不是很清楚。你的意思是全局变量吗?可以从任何对象访问的变量吗?

编辑(基于评论)

您可以执行以下操作,使变量仅限于您的代码:

//This function will execute right away (it is basically the same as leaving it out,
//except that anything inside of it is scoped to it.
(function(){
    var globalToThisScope = "this is global ONLY from within this code section";


    window.object = {
        //Now any instance of this object can see that variable,
        // but anything outside of the outer empty function will not see anything
    };
})();

答案 3 :(得分:0)

我同意Peter Bailey(+1)。 Douglas Crockford has a discussion公共和私有实例变量; Peter提出了一种添加静态公共变量的好方法。