Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 在构造函数之前调用Setter_Oop_Typescript - Fatal编程技术网

Oop 在构造函数之前调用Setter

Oop 在构造函数之前调用Setter,oop,typescript,Oop,Typescript,我试图创建HelloWorld类的实例,但是它不起作用。我发现问题在于setter方法调用了构造函数,而构造函数应该初始化变量名,而变量welcome是可选的 我为这两个变量指定了getter和setter。浏览器的控制台正在抛出有关最大调用堆栈大小的错误。如果我评论我的getter和setter,它将停止抛出错误 谁能给我解释一下那种奇怪的行为吗? 此外,映射还有另一个问题。我试图返回一个数组,如果像in这样的li元素使用.map进行反应。它给我带逗号的结果。如何在打印时去除它们 这是我代码的

我试图创建HelloWorld类的实例,但是它不起作用。我发现问题在于setter方法调用了构造函数,而构造函数应该初始化变量名,而变量welcome是可选的

我为这两个变量指定了getter和setter。浏览器的控制台正在抛出有关最大调用堆栈大小的错误。如果我评论我的getter和setter,它将停止抛出错误

谁能给我解释一下那种奇怪的行为吗? 此外,映射还有另一个问题。我试图返回一个数组,如果像in这样的li元素使用.map进行反应。它给我带逗号的结果。如何在打印时去除它们

这是我代码的链接

更新1 我修复了getter和setter的问题,为私有值提供了一个u符号

现在我有一个问题

function print() {
    if (invitations) {
        document.getElementById('result').innerHTML = invitations.map((e)=> {
            return `<li>${e.welcome + e.name}</li>`;
        });
    }
}
编译器抱怨类型“string[]”不能分配给类型“string”。在document.getElementById'result.innerHTML中,未分配类型,因为它是html元素

更新2 有以下几种解决方案: 1关于与构造函数和set&get的冲突-我通过添加到对象的名称中更改了对象的值。它解决了冲突。
2关于逗号-我在map.join之后添加了逗号,解决了我的问题。

您的以下代码子集是一个编译错误:

class HelloWorld {
    constructor(public name: string) {
    }
    set name(e: string) {
        this.name = e;
    }
    get name(): string {
        return this.name;
    }
}
垃圾输入=>垃圾输出

修理
不要使用同名的getter/setter和properties。

但是如果我需要使用相同的值?首先,我应该初始化变量,然后我需要有能力在将来可能的情况下更改它的属性。由于某种原因,PhpStorm没有对这些变量做任何说明。setter和getter通常应该设置并返回类的私有字段。@DanielKhoroshko我理解,但是复制呢?我刚刚看到你的更新,很高兴知道现在一切都正常了!