我想定义在Class定义中的所有实例中使用的单个变量(它是jQuery插件中的普通函数构造函数)。
有这样的功能吗?
如果有,只需一个简单的演示,我想我会理解。
答案 0 :(得分:2)
您正在寻找的内容基本上是private static
或protected static
变量,不能在javascript(我知道)中100%模拟。
但您可以public static
或private
。
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提出了一种添加静态公共变量的好方法。