JS++ 静态成员和 “应用-全局 “数据
到目前为止,我们所声明的所有字段和方法都属于类的实例。静态成员也可以被添加到一个类中。静态成员在程序开始时被初始化,对类的所有实例都可用。
举个例子,我们可能想统计一下我们有多少个 “动物 “实例。这个数据对于一个或另一个 “动物 “实例来说不应该是唯一的,它对所有的动物都应该是一样的。让我们改变Animal.jspp,用 “静态 “修饰符来实现这个目标。
我们在’动物’类中创建了一个新字段。’计数’。它在程序开始时被初始化为零,因为它被标记为 “静态”。从那以后,在每次调用’Animal’的构造函数时(例如通过继承),我们使用++递增运算符将’count’静态字段递增1。我们通过’Animal.count’来引用这个静态字段。实际上,我们不需要在这个程度上限定名称,可以直接在类中使用’count’,但我的目的是要说明’count’应该如何通过类的名称而不是实例来访问。最后,我们声明了一个getCount()方法,返回静态字段的值。
转到main.jspp,用jQuery将这个计数渲染到网页上。
编译该项目并打开index.html。现在你应该看到你渲染的动物之后的计数。
虽然我们已经展示了声明时的静态字段初始化,但还有另一种方法来初始化我们的静态字段:静态构造函数。我们一样可以改变Animal.jspp来使用静态构造函数,如下所示。
静态构造函数不接受任何参数,也不能应用访问修改器。它们将在应用程序启动时运行。在上面的代码中,’count’静态字段在声明时没有被初始化。相反,我们把’count’字段的初始化移到了静态构造函数中。
JS++并不像JavaScript那样有一个 “全局范围”。相反,在JavaScript中可能泄漏到全局范围的变量,在Js++中是 “文件范围”,在它所声明的文件之外将不可用。如果你想要 “全局变量”,你可以使用静态成员实现一个更安全的子集,即 “应用-全局数据”,它同样有用,而且没有全局变量的潜在问题(例如,无意中泄露给其他程序或库)。下面是一个如何使用静态成员创建应用程序全局数据的例子。