Javascript 创建一个具有私有属性名的Puppy类,并为该属性创建一个名为getName和setName的getter和setter。构造函数应该

Javascript 创建一个具有私有属性名的Puppy类,并为该属性创建一个名为getName和setName的getter和setter。构造函数应该,javascript,constructor,getter-setter,setter,getter,Javascript,Constructor,Getter Setter,Setter,Getter,JavaScript不是我的专长,对于回答这些问题的人来说,你们绝对是救命恩人 创建一个具有私有属性名的Puppy类,并为该属性创建一个名为getName和setName的getter和setter。构造函数应使用参数初始化私有属性。 我的代码: 截图: 我回答这个问题时,显然遗漏了“私人”这个突出的词。我发布的代码创建了公共实例变量 class Puppy { constructor(n) { // private property

JavaScript不是我的专长,对于回答这些问题的人来说,你们绝对是救命恩人

创建一个具有私有属性名的Puppy类,并为该属性创建一个名为getName和setName的getter和setter。构造函数应使用参数初始化私有属性。

我的代码:

截图:

我回答这个问题时,显然遗漏了“私人”这个突出的词。我发布的代码创建了公共实例变量

    class Puppy {
        constructor(n) {
            // private property
            var name = n

            // methods that use private property
            this.getName = () => {return name}
            this.setName = (n) => {name = n}

            // public property
            this.nickname = n
        }

        // methods that use public property
        setNickname(n) { this.nickname = n }
        getNickname() { return this.nickname }
    }

    p = new Puppy("fido")

    console.log("p.name",p.name) // undefined, not accessible
    console.log("p.getName()",p.getName()) // fido
    console.log("p.getNickname()",p.getNickname()) // fido

    console.log("---")

    p.name = "barker" // defines a new property on this instance of Puppy
    console.log("p.name",p.name) // barker
    console.log("p.getName() ",p.getName()) // doesn't change private name fido

    console.log("---")

    p.setName("fuzz") // change private name
    console.log("p.getName()",p.getName()) // fuzz
    console.log("p.getNickname()",p.getNickname()) // fido

    console.log("---")

    p.nickname = "chewy" // set public property directly
    console.log("p.getNickname()",p.getNickname()) // chewy

看起来您编写的是java而不是javascript。扩展是如何将私有属性与getter和setter一起使用,因为它们没有在构造函数的函数体中声明。此外,这会将getName和setName放在每个实例上,它们不会被继承(cf instance vs class方法)。
    class Puppy {
        constructor(n) {
            // private property
            var name = n

            // methods that use private property
            this.getName = () => {return name}
            this.setName = (n) => {name = n}

            // public property
            this.nickname = n
        }

        // methods that use public property
        setNickname(n) { this.nickname = n }
        getNickname() { return this.nickname }
    }

    p = new Puppy("fido")

    console.log("p.name",p.name) // undefined, not accessible
    console.log("p.getName()",p.getName()) // fido
    console.log("p.getNickname()",p.getNickname()) // fido

    console.log("---")

    p.name = "barker" // defines a new property on this instance of Puppy
    console.log("p.name",p.name) // barker
    console.log("p.getName() ",p.getName()) // doesn't change private name fido

    console.log("---")

    p.setName("fuzz") // change private name
    console.log("p.getName()",p.getName()) // fuzz
    console.log("p.getNickname()",p.getNickname()) // fido

    console.log("---")

    p.nickname = "chewy" // set public property directly
    console.log("p.getNickname()",p.getNickname()) // chewy