JS++ 构造函数

JS++ 构造函数

在我们的猫的例子中,我们已经能够将我们的猫实例化并单独提供一个名字。然而,我们可能希望在实例化时要求猫被命名,这样我们就不会意外地忘记给猫命名。构造函数允许我们控制实例化。

默认情况下,JS++为你提供一个构造器。这被称为 “默认构造函数”。如果你没有任何明确定义的构造函数,它就会被JS++隐式定义。默认构造函数不需要参数,只返回一个新的类的实例。为了理解默认构造函数,我们可以明确地定义它。

external ;

module Animals
{
    class Cat
    {
        string _name;

        varelement = (
            """
            <div class="animal">
                <i class="icofont icofont-animal-cat"></i>
            </div>
            """
        );

        Cat() {
        }

        property string name() {
            return _name;
        }
        property void name(string name) {
            _name = name;
        }

        void render() {element.attr("title", _name);
            ("#content").append(element);
        }
    }
}

如果你尝试编译这个项目,应该不会有问题。原因是我们在main.jspp文件中实例化 “猫 “类时没有参数。如果你试图提供一些参数,你会得到一个不正确代码的编译错误。

正如你从我们明确定义的默认构造函数中看到的,该构造函数没有参数。此外,它也不做任何事情。(没有动作的构造函数仍然会返回一个新的类的实例。构造函数中明确的 “返回 “语句是不必要的,也是不允许的,因为构造函数总是返回类的一个新实例)。

构造函数的一个特殊用途是将字段初始化为自定义值。现在,如果你实例化’Cat’类,你会得到’_name’字段,它是一个空字符串。如果我们想让’Cat’的实例总是有一个名字,我们必须在实例化时通过指定一个构造函数来要求它。

首先,删除getter和setter方法。其次,将我们定义的显式构造函数改为接受一个参数:猫的名字的 “字符串”。最后,将该字段初始化为提供给构造函数的参数。(你现在应该知道怎么做了)。

你在Cat.jspp中的代码现在应该看起来像这样。

external ;

module Animals
{
    class Cat
    {
        string _name;

        varelement = (
            """
            <div class="animal">
                <i class="icofont icofont-animal-cat"></i>
            </div>
            """
        );

        Cat(string name) {
            _name = name;
        }

        void render() {element.attr("title", _name);
            ("#content").append(element);
        }
    }
}

接下来,我们要修改main.jspp。

import Animals;

Cat cat1 = new Cat("Kitty");
cat1.render();
Cat cat2 = new Cat("Kat");
cat2.render();

编译该项目。在你的网络浏览器中打开index.html。你应该再次看到那两只猫。将鼠标悬停在它们的图像上。你应该再一次看到它们的名字。

值得注意的是,隐式定义的默认构造函数(需要零参数)不再被定义。一旦你为一个类明确地定义了一个构造函数,默认的构造函数就不会被明确地定义。因此,现在实例化我们的 “猫 “类的唯一方法是使用需要名字的构造函数。如果你试图改变main.jspp中的代码来实例化一个零参数的类,你会得到一个编译错误。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程