Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用静态方法从类中访问变量?_Javascript - Fatal编程技术网

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

Javascript 如何使用静态方法从类中访问变量?,javascript,Javascript,我尝试了alert(this.pubVar)和alert(priVar),但没有成功。我做错了什么 我要把这个问题改一下。。我第一次解释得不好 如何在类中声明静态变量 我知道java很简单,只需将静态放在变量类型前面,就得到了一个静态变量。我似乎找不到javascript的选项。定义: //my class function myClass() { this.pubVar = 'hello public'; var priVar = 'hello private'; } myC

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

我要把这个问题改一下。。我第一次解释得不好

如何在类中声明静态变量

我知道java很简单,只需将静态放在变量类型前面,就得到了一个静态变量。我似乎找不到javascript的选项。

定义:

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


}

myClass.staticMethod = function()
{

   //how do i access thos variables here

}
使用:

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


另外,如果您需要访问类的属性,为什么要将其设置为静态方法?

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

如果您正在寻找实例方法的代码,那么应该是以下代码:

var instance = new myClass();
myClass.staticMethod(instance);
或者,您可以将对对象的引用传递到静态方法中,该方法如下所示:

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.prototype.myMethod = function() {
   alert(this.pubVar);
}


var instance = new MyClass();
instance.myMethod(); // alerts 'hello public'
唯一的问题是你真的需要使用静态吗?
也没有办法进入priVar。因为它使用闭包

很抱歉在一篇旧帖子上给出了答案,也许这会对某人有所帮助

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

//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)

我真的不想创建一个实例,我喜欢用classname.methodname()调用函数,然后你肯定不想使用静态方法。所以我想答案是否定的。。。我试着从课堂上访问它,所以我不必把它传递给每一个静态方法,这就是我要说的+1/我认为在java中可以在类中声明静态变量并使用静态方法访问它们。我想问题应该是如何在javascript类中声明静态变量。。
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'
//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)
//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);
}