//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的选项..
答案 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。因为它使用了闭包。