我正在尝试创建静态变量和静态函数。但是当我访问它时它给了我未定义的原因? 这是我的功能
function Shape(){
this.namev="naven"
Shape.PIe="3.14";
Shape.getName=function(){
return "nveen test shhsd"
}
}
alert(Shape.PIe)
alert(Shape.getName())
答案 0 :(得分:3)
在第一次调用Shape.getName()
之后(初始化代码在Shape()
内),Shape()
函数未初始化,因此Shape.getName
属性不会存在直到Shape()
被调用。
也许你想要的是这个:
// define constructor that should only be called with the new operator
function Shape() {
this.namev="naven";
}
// define static methods and properties
// that can be used without an instance
Shape.PIe="3.14";
Shape.getName=function(){
return "nveen test shhsd"
}
// test static methods and properties
alert(Shape.PIe)
alert(Shape.getName())
请记住,在Javascript中,函数是一个对象,它可以像普通对象一样拥有自己的属性。因此,在这种情况下,您只需使用Shape
函数作为可以放置静态属性或方法的对象。但是,不要期望在静态方法中使用this
,因为它们没有连接到任何实例。它们是静态的。
如果您想要可以唯一访问Shape对象实例的实例属性或方法,那么您需要以不同方式创建方法和属性(因为实例方法或属性不是静态的)。
答案 1 :(得分:1)
要创建所有实例共享的静态变量,您需要在函数声明之外声明它,如下所示:
function Shape() {
// ...
}
Shape.PIe = "3.14";
alert(Shape.PIe);
有关如何将一些熟悉的OOP访问概念“转换”为Javascript的详细信息,请参阅此帖子:https://stackoverflow.com/a/1535687/1079597