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

如何在JavaScript的datasets对象内部调用自身属性生成fullName?

JavaScript对象内部引用自身属性创建fullName的解决方案

在对象字面量初始化阶段,this并不指向当前正在创建的datasets对象,而是指向外层执行上下文(浏览器环境下通常是window,严格模式下为undefined),所以直接用this.cst_TEST会触发找不到属性的错误。以下是两种可行的解决方法:

方案1:先初始化对象,再追加fullName属性

先创建不含fullName的基础对象,之后通过对象名直接引用内部属性完成赋值:

var datasets = {
  cst_TEST: {
    firstName: "John",
    lastName: "Deacon"
  },
  glb_TEST: { age: "30" }
};

// 追加fullName属性
datasets.fullName = datasets.cst_TEST.firstName + " " + datasets.cst_TEST.lastName;

var kOBJ = {
  fxAAA(){ console.log("First Name: " + datasets.cst_TEST.firstName); },
  fxBBB(){ console.log("Last Name: " + datasets.cst_TEST.lastName); },
  fxCCC(){ console.log("Age: " + datasets.glb_TEST.age); },
  fxDDD(){ console.log("Full Name: " + datasets.fullName); }
};

// 调用测试
kOBJ.fxAAA(); // 输出: First Name: John
kOBJ.fxBBB(); // 输出: Last Name: Deacon
kOBJ.fxCCC(); // 输出: Age: 30
kOBJ.fxDDD(); // 输出: Full Name: John Deacon

方案2:使用getter方法(推荐,支持动态更新)

将fullName定义为对象的getter属性,每次访问时都会动态计算,此时this会正确指向当前对象:

var datasets = {
  cst_TEST: {
    firstName: "John",
    lastName: "Deacon"
  },
  glb_TEST: { age: "30" },
  // 定义getter
  get fullName() {
    return this.cst_TEST.firstName + " " + this.cst_TEST.lastName;
  }
};

var kOBJ = {
  fxAAA(){ console.log("First Name: " + datasets.cst_TEST.firstName); },
  fxBBB(){ console.log("Last Name: " + datasets.cst_TEST.lastName); },
  fxCCC(){ console.log("Age: " + datasets.glb_TEST.age); },
  fxDDD(){ console.log("Full Name: " + datasets.fullName); }
};

// 调用测试
kOBJ.fxDDD(); // 输出: Full Name: John Deacon

// 动态修改属性后,fullName会自动更新
datasets.cst_TEST.firstName = "Freddie";
kOBJ.fxDDD(); // 输出: Full Name: Freddie Deacon

两种方案区别:方案1是一次性赋值,后续修改firstName/lastName不会同步更新fullName;方案2是动态计算,每次访问都会取最新属性值,适合需要动态更新的场景。

内容的提问来源于stack exchange,提问作者brut65

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:37:13