如何删除此错误TypeError:a.area不是eval中的函数?

时间:2015-09-08 02:59:40

标签: javascript jquery ecmascript-6

http://www.es6fiddle.net/iearlj80/

您好 我正在尝试学习ES6。但是我收到错误 TypeError:a.area不是eval的函数为什么?其实我正在调用这样的函数函数

class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }

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

  calcArea() {
    return this.height * this.width;
  }
}

var a =new Polygon(10,20)
alert(a.area())

当我像这样使用 a.calcArea()时它可以正常工作,但当我像这样使用 a.area()时会出错?为什么?

2 个答案:

答案 0 :(得分:2)

因为您将函数定义为get area(){},这实际上是在对象上定义getter的方法。

所以你不需要打电话

说这个

alert(a.area)

而不是

alert(a.area())

updated demo

参考(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

答案 1 :(得分:1)

如果你有

a.area()会有效

area() {

但如果你有

get area() {

你宣布了一个属性getter,这意味着你可以通过直接阅读.area获得该区域。

第一个声明了一个具有函数值的类原型属性。 第二个声明了一个类原型属性,它具有一个存取器'getter'函数。尝试访问.area会调用您的area函数,结果将是返回值。

例如,要使.area()使用您的语法,它就像:

get area(){
    return function(){
        return 4;
    };
}

然后你可以做a.area() === 4,但是你可以做

area(){
    return 4;
}