You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

旧版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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:29:42