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()时会出错?为什么?
答案 0 :(得分:2)
因为您将函数定义为get area(){}
,这实际上是在对象上定义getter的方法。
所以你不需要打电话
说这个
alert(a.area)
而不是
alert(a.area())
参考(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;
}