旧版JavaScript无class语法下,如何实现类的getter方法?
使用ES5语法实现类的Getter方法
嘿,这个问题问得好!在还没有class语法的ES5时代,我们可以借助Object.defineProperty()这个API来实现和class里get关键字一样的效果,让你不用加括号就能直接访问fullname属性。
修改后的代码示例:
function User(name, lastname) { this.name = name; this.lastname = lastname; // 使用Object.defineProperty定义getter Object.defineProperty(this, 'fullname', { get: function() { return this.name + ' ' + this.lastname; }, // 可选:如果需要允许通过fullname修改姓名,可以加上set方法 // set: function(value) { // const [first, last] = value.split(' '); // this.name = first || this.name; // this.lastname = last || this.lastname; // }, enumerable: true // 让该属性可被for...in等遍历操作识别,可选配置 }); } // 测试调用 var u = new User('dario', 'developer'); console.log(u.fullname); // 输出 "dario developer",无需加括号!
关键细节说明:
Object.defineProperty()是ES5提供的核心API,能精确控制对象属性的行为,包括定义getter/setter、设置属性是否可枚举/可修改等。- 当你访问
u.fullname时,JS引擎会自动触发我们定义的get函数,返回实时计算的全名,和class语法里的get fullname()逻辑完全一致。 - 如果需要支持通过
u.fullname = "新姓名"的方式反向修改name和lastname,可以启用注释里的set方法,实现双向同步。
内容的提问来源于stack exchange,提问作者91DarioDev
相关产品推荐
相关产品推荐

