JS++|构造函数

在我们的cat示例中,我们已经能够实例化我们的cat并分别提供一个名称。然而,可能需要在实例化时为猫命名,这样我们就不会意外地忘记给猫命名。构造函数允许我们控制实例化。

null

默认情况下,JS++为您提供了一个构造函数。这被称为“默认构造函数”如果您没有任何显式定义的构造函数,它将由JS++隐式定义。默认构造函数不接受参数,只返回类的新实例。为了理解默认构造函数,我们可以明确定义它:

external $;

module Animals
{
    class Cat
    {
        string _name;

        var $element = $(
            """
            <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);
        }
    }
}

如果你试图编译这个项目,应该没有问题。原因是,我们正在实例化“Cat”类,而主类中没有参数。jspp文件。如果您试图提供一些参数,您将得到一个错误代码的编译错误。

从显式定义的默认构造函数中可以看到,构造函数没有参数。此外,它什么也不做。(没有操作的构造函数仍将返回类的新实例。构造函数中的显式“return”语句是不必要的,也是不允许的,因为构造函数总是返回类的新实例。)

构造函数的一个特殊用途是将字段初始化为自定义值。现在,如果实例化’Cat’类,您将得到一个空字符串形式的’_name’字段。如果我们希望“Cat”的实例总是有一个名称,我们必须在实例化期间通过指定构造函数来要求它。

首先,删除getter和setter方法。第二,更改我们定义的显式构造函数,以获取一个参数:一个“string”作为cat的名称。最后,将字段初始化为提供给构造函数的参数。(你现在应该知道怎么做了。)

你的代码在Cat中。jspp现在应该是这样的:

external $;

module Animals
{
    class Cat
    {
        string _name;

        var $element = $(
            """
            <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);
        }
    }
}

下一步,我们必须改变主要的。jspp:

import Animals;

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

编译项目。开放索引。网页浏览器中的html。你应该再看看那两只猫。将鼠标悬停在他们的图像上。你应该再次看到他们的名字。

需要注意的是,隐式定义的默认构造函数(接受零参数)不再定义。一旦为类显式定义构造函数,默认构造函数将不会显式定义。因此,现在实例化“Cat”类的唯一方法是使用需要名称的构造函数。如果你试图更改main中的代码。jspp要实例化一个没有参数的类,您将得到一个编译错误。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享