为什么静态变量不显示输出?

时间:2015-07-04 05:55:32

标签: javascript jquery

我正在尝试创建静态变量和静态函数。但是当我访问它时它给了我未定义的原因? 这是我的功能

  function Shape(){
        this.namev="naven"
        Shape.PIe="3.14";
        Shape.getName=function(){
            return "nveen test shhsd"
        }

    }

    alert(Shape.PIe)
    alert(Shape.getName())

2 个答案:

答案 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