JS++ 静态成员和 “应用-全局 “数据

JS++ 静态成员和 “应用-全局 “数据

到目前为止,我们所声明的所有字段和方法都属于类的实例。静态成员也可以被添加到一个类中。静态成员在程序开始时被初始化,对类的所有实例都可用。

举个例子,我们可能想统计一下我们有多少个 “动物 “实例。这个数据对于一个或另一个 “动物 “实例来说不应该是唯一的,它对所有的动物都应该是一样的。让我们改变Animal.jspp,用 “静态 “修饰符来实现这个目标。

external ;

module Animals
{
    class Animal
    {
        protected varelement;
        private static unsigned int count = 0;

        protected Animal(string iconClassName) {
            string elementHTML = makeElementHTML(iconClassName);
            element =(elementHTML);

            Animal.count++;
        }

        public static unsigned int getCount() {
            return Animal.count;
        }

        public virtual void render() {
            ("#content").append(element);
        }

        private string makeElementHTML(string iconClassName) {
            string result = '<div class="animal">';
            result += '<i class="icofont ' + iconClassName + '"></i>';
            result += "</div>";
            return result;
        }
    }
}

我们在’动物’类中创建了一个新字段。’计数’。它在程序开始时被初始化为零,因为它被标记为 “静态”。从那以后,在每次调用’Animal’的构造函数时(例如通过继承),我们使用++递增运算符将’count’静态字段递增1。我们通过’Animal.count’来引用这个静态字段。实际上,我们不需要在这个程度上限定名称,可以直接在类中使用’count’,但我的目的是要说明’count’应该如何通过类的名称而不是实例来访问。最后,我们声明了一个getCount()方法,返回静态字段的值。

转到main.jspp,用jQuery将这个计数渲染到网页上。

import Animals;

external ;

Animal[] animals = [
    new Cat("Kitty"),
    new Cat("Kat"),
    new Dog("Fido"),
    new Panda(),
    new Rhino()
];

foreach(Animal animal in animals) {
    animal.render();
}("#content").append("<p>Number of animals: " + Animal.getCount().toString() + "</p>");

编译该项目并打开index.html。现在你应该看到你渲染的动物之后的计数。

JS++  静态成员和 应用-全局 数据

虽然我们已经展示了声明时的静态字段初始化,但还有另一种方法来初始化我们的静态字段:静态构造函数。我们一样可以改变Animal.jspp来使用静态构造函数,如下所示。

external ;

module Animals
{
    class Animal
    {
        protected varelement;
        private static unsigned int count;

        protected Animal(string iconClassName) {
            string elementHTML = makeElementHTML(iconClassName);
            element =(elementHTML);

            Animal.count++;
        }

       static Animal() {
            Animal.count = 0;
        }

        public static unsigned int getCount() {
            return Animal.count;
        }

        public virtual void render() {
            ("#content").append(element);
        }

        private string makeElementHTML(string iconClassName) {
            string result = '<div class="animal">';
            result += '<i class="icofont ' + iconClassName + '"></i>';
            result += "</div>";
            return result;
        }
    }
}

静态构造函数不接受任何参数,也不能应用访问修改器。它们将在应用程序启动时运行。在上面的代码中,’count’静态字段在声明时没有被初始化。相反,我们把’count’字段的初始化移到了静态构造函数中。

JS++并不像JavaScript那样有一个 “全局范围”。相反,在JavaScript中可能泄漏到全局范围的变量,在Js++中是 “文件范围”,在它所声明的文件之外将不可用。如果你想要 “全局变量”,你可以使用静态成员实现一个更安全的子集,即 “应用-全局数据”,它同样有用,而且没有全局变量的潜在问题(例如,无意中泄露给其他程序或库)。下面是一个如何使用静态成员创建应用程序全局数据的例子。

module Application
{
    class Config
    {
        public static string hostname = "127.0.0.1";
        public static unsigned int port = 80;
    }
}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

JavaScript 教程