为何通过实例调用JavaScript类的get方法无需括号?
为什么用get定义的类方法调用时不需要加括号?
这其实是JavaScript中**getter(访问器属性)**的特性,你没遗漏什么关键知识点,只是对get关键字的作用有点误解~
核心区别:get定义的是访问器属性,不是普通方法
当你在类里用get关键字声明一个“方法”时,它本质上并不是一个可调用的函数,而是一个访问器属性。它的作用是:当你通过类实例访问这个属性名时,JavaScript引擎会自动执行对应的get函数,并把函数的返回值作为这个属性的值返回给你。
举个例子拆解你的代码:
class Rectangle { constructor(height, width) { this.height = height; this.width = width; } // Getter:定义访问器属性area get area() { return this.calcArea(); } // 普通方法:原型上的可调用函数 calcArea() { return this.height * this.width; } } const square = new Rectangle(10, 10);
- 当你写
square.area时,JS引擎会自动触发get area()里的逻辑,执行this.calcArea()得到100,所以控制台输出100; - 当你写
square.area()时,你其实是把square.area返回的100(一个数字值)当作函数来调用,数字并不是函数,自然就会抛出Uncaught TypeError: square.area is not a function的错误。
一句话总结
用get定义的“方法”是伪装成属性的逻辑,访问它就像访问普通的对象属性一样不需要加括号;而普通类方法是真正的函数,必须加括号才能执行。
内容的提问来源于stack exchange,提问作者Aaditya Sharma
相关产品推荐
相关产品推荐

