如何使用静态方法从类中访问变量?

时间:2009-08-18 17:51:28

标签: javascript

//my class
function myClass()
{
   this.pubVar = 'hello public';
   var priVar = 'hello private';


}

myClass.staticMethod = function()
{

   //how do i access thos variables here

}

我尝试alert(this.pubVar)alert(priVar)但没有成功。我做错了什么?

我要稍微改变一下这个问题......我第一次没有解释好。

如何在类中声明静态变量?

我知道java很简单,你只需要在变量类型的前面放置静态变量,然后你就得到了一个静态变量。我似乎无法找到javascript的选项..

5 个答案:

答案 0 :(得分:4)

由于你想在你的方法中使用对象的实例,我认为你真的不想创建一个静态方法,你想要的是一个适用的方法,可以通过所有实例访问。

为此,您可以扩展构造函数的prototype

function MyClass() {
   this.pubVar = 'hello public';
   var priVar = 'hello private';
}

MyClass.prototype.myMethod = function() {
   alert(this.pubVar);
}


var instance = new MyClass();
instance.myMethod(); // alerts 'hello public'

当您扩展构造函数的原型时,驻留在其上的所有成员将继承到使用new运算符创建的对象实例。

因此,您只需在构造函数中定义此方法一次,并且可以在每个实例的上下文中访问它(方法内的this关键字引用对象实例)。

答案 1 :(得分:3)

定义:

myClass.staticMethod = function(obj)
{
    alert(obj.pubVar);
}

使用:

var instance = new myClass();
myClass.staticMethod(instance);

您将无法使用“priVar”,因为它不是类中的变量。这是一个方法范围的变量。

此外,如果您需要访问该类的属性,为什么要将其作为静态方法?

答案 2 :(得分:1)

对于旧帖子的回答感到抱歉,这可能会对某人有所帮助

如果要从静态方法访问变量,可以将该变量声明为静态属性。

//my class
function myClass()
{
   this.pubVar = 'hello public';
   var priVar = 'hello private';
}

myClass.staticProperty = 'someValue';

myClass.staticMethod = function()
{
    //This is how you access it
    alert(myClass.staticProperty);
}

答案 3 :(得分:0)

嗯......如果你试图访问“this”那么你真的不想要一个静态的方法。静态方法属于该类,并且无权访问该类的任何给定实例,因此静态方法的上下文中不存在“this”。

如果您正在寻找实例方法的代码,那么它们就是这样的:

function myClass()
{
    this.pubVar = 'hello public';
    var priVar = 'hello private';

    this.method = function(){
        alert(priVar);
    }
}

或者,您可以将对象的引用传递给静态方法,该方法如下所示:

function myClass()
{
    this.pubVar = 'hello public';
    var priVar = 'hello private';
}
myClass.staticMethod = function(obj)
{
    alert(obj.pubVar);
}

希望有所帮助

答案 4 :(得分:0)

这很简单。因为你需要一个类实例来实现这个目的:

//my class
function myClass()
{
   this.pubVar = 'hello public';
   var priVar = 'hello private';
}

myClass.staticMethod = function()
{
   //how do i access thos variables here
   alert(this.pubVar);
}

var instance=new myClass(); // this is instance of class
myClass.staticMethod.call(instance)

唯一的问题是你真的需要使用静态吗? 也没有办法访问priVar。因为它使用了闭包。