我的用于计算面积和周长的源代码不起作用

时间:2019-08-07 15:50:14

标签: javascript

我是javascript的新手,我对poo存有疑问,并且如果您能帮助我,我有一个问题,无法实现cercle的许可 谢谢

class cercle {
  constructor(rayon) {
    this.rayon = rayon;
  }

  get area() {
    return this.calcArea();
  }

  calcArea() {
    return Math.PI * this.rayon * this.rayon;
  }

  get perim() {
    return this.calcperim();
  }

  get calcperim() {
    return 2 * Math.PI * this.rayon;
  }
}

const cerc = new cercle(10);

console.log(cercle.area);
console.log(cercle.perim);

4 个答案:

答案 0 :(得分:1)

您的代码似乎还可以,但是您错过了对象cerccercle的情况。另外,如果要使用吸气剂get作为吸气剂,请从方法calcperim()中删除吸气剂this.calcperim;或不加括号(get)来调用它。

getter语法将对象属性绑定到一个在查找该属性时将被调用的函数。

根据MDN documentation

  

有时,希望允许访问返回动态计算值的属性,或者您可能希望反映内部变量的状态而无需使用显式方法调用。在JavaScript中,这可以通过使用getter来完成。尽管可以同时使用getter和setter来创建一种伪伪类型,但无法同时将class circle { constructor(rayon) { this.rayon = rayon; } get area() { return this.calcArea(); } calcArea() { return Math.PI * this.rayon * this.rayon; } get perim() { return this.calcperim(); } calcperim() { return 2 * Math.PI * this.rayon; } } const cerc = new circle(10); console.log(cerc.area); console.log(cerc.perim);绑定到一个属性并使该属性实际持有一个值。属性。

main {
  max-width: 800px;
  padding: 40px;
  border: 1px solid rgba(0,0,0,.2);
  background: #fff;
  box-shadow: 0 1px 3px rgba(0,0,0,.1);
}

.main-tab section {
  display: none;
  padding: 20px 0 0;
  border-top: 1px solid #abc;
}

.main-tab input {
  display: none;
}

.main-tab label {
  display: inline-block;
  margin: 0 0 -1px;
  padding: 15px 25px;
  font-weight: 600;
  text-align: center;
  color: #abc;
  border: 1px solid transparent;
}

.main-tab label:before {
  font-weight: normal;
  margin-right: 10px;
}


.main-tab label:hover {
  color: #789;
  cursor: pointer;
}

.main-tab input:checked + label {
  color: #0af;
  border: 1px solid #abc;
  border-top: 2px solid #0af;
  border-bottom: 1px solid #fff;
}

#tab1:checked ~ #content1,
#tab2:checked ~ #content2 {
  display: block;
}

答案 1 :(得分:0)

变量名cerc使用不正确,函数声明calcperim不正确。这是工作代码:

class cercle {
    constructor(rayon) {
        this.rayon = rayon;
    }

    get area() {
        return this.calcArea();
    }

    calcArea() {
        return Math.PI * this.rayon * this.rayon;
    }
    get perim() {

        return this.calcperim();
    }

    calcperim() {
        return 2 * Math.PI * this.rayon;
    }

}

const cerc = new cercle(10);

console.log(cerc.area);
console.log(cerc.perim);

答案 2 :(得分:-1)

您的问题是“ this”关键字引用了窗口对象。

答案 3 :(得分:-1)

尝试

class cercle {
constructor(rayon) {
    this.rayon = rayon;
}

get area() {
    return this.calcArea();
}

calcArea() {
    return Math.PI * this.rayon * this.rayon;
}
get perim() {

    return this.calcperim();
}

calcperim() {
    return 2 * Math.PI * this.rayon;
}

}

const cerc = new cercle(10);

console.log(cerc.area);
console.log(cerc.perim);

show this image