【问题标题】:Create a Puppy class with private property name and both a getter and a setter for that property called getName and setName. The constructor should创建一个带有私有属性名称的 Puppy 类,以及该属性的 getter 和 setter,称为 getName 和 setName。构造函数应该
【发布时间】:2018-10-09 23:20:07
【问题描述】:

JavaScript 不是我的菜,对于那些回答这些问题的人来说,你绝对是救命稻草。

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

我的代码:

public class Puppy {
private String name;

public Puppy(String name) {
  setName(name);
}

public String getName() {
  return Name;
}

public String setName(String name) {
  this.name=name;
}

截图: here

【问题讨论】:

  • 看起来你写的是java而不是javascript。

标签: javascript constructor getter-setter setter getter


【解决方案1】:

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

    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

【讨论】:

  • 一个扩展是如何将私有属性与 getter 和 setter 一起使用,因为它们没有在构造函数的函数体中声明。此外,这会将 getNamesetName 放在每个实例上,它们不是继承的(cf 实例与类方法)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
相关资源
最近更新 更多