在构造函数之前调用Setter

时间:2017-09-27 18:18:35

标签: oop typescript

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

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

有人能解释我这种奇怪的行为吗? 此外,映射还有另一个问题。我试图通过li使用React中的.map()元素“返回”数组。它用逗号给我结果。如何在打印时摆脱它们?

这是我的代码https://codepen.io/CrUsH20/pen/yzMjzL?editors=1010

的链接

更新了#1

我通过为私有值设置_符号来解决getter& setters的问题。

现在我遇到了问题

function print() {
    if (invitations) {
        document.getElementById('result').innerHTML = invitations.map((e)=> {
            return `<li>${e.welcome + e.name}</li>`;
        });
    }
}

编译器在Type 'string[]' is not assignable to type 'string'.中抱怨document.getElementById('result').innerHTML而未分配类型,因为它是一个html元素

更新#2

有解决方案: 1#关于与构造函数和set&amp; get的冲突 - 我通过添加名称_来更改对象的值。它解决了冲突。 2#关于逗号 - 我在map .join('')之后添加了解决我问题的内容。

1 个答案:

答案 0 :(得分:1)

以下代码(您的子集)是编译错误:

class HelloWorld {
    constructor(public name: string) {
    }
    set name(e: string) {
        this.name = e;
    }
    get name(): string {
        return this.name;
    }
}

enter image description here

Garbage in =&gt;垃圾出局

修复

不要使用具有相同名称的getter / setter和属性。