JavaScript中如何在对象内部使用对象自身的属性?
如何在对象内部引用自身属性
嘿,我来帮你搞定这个问题~首先得指出你示例代码里的两个小问题:一是语法错误,a: 1后面少了个逗号;二是核心问题——在对象字面量初始化的时候,this并不指向当前正在创建的obj,所以你直接写this.obj或者this.a都是拿不到正确值的,因为这时候对象还没完全创建好呢。
下面给你几种可行的解决方法,按需选择:
方法1:使用Getter函数
如果希望属性b能动态关联a的值(比如a变了,b自动跟着变),用getter是最方便的。getter是在你访问这个属性的时候才会执行,这时候对象已经创建完成,this就能正确指向当前对象:
var obj = { a: 1, get b() { // 这里的this就是obj本身 return this.a + this.a; } }; console.log(obj.b); // 输出2 obj.a = 3; console.log(obj.b); // 输出6,自动更新了
方法2:先创建对象,再添加属性
如果b的值是固定的,不需要跟着a变化,那可以先创建带有基础属性的对象,再给b赋值。这时候obj已经存在,直接通过obj.a就能访问到属性:
var obj = { a: 1 }; // 现在obj已经初始化完成,能直接访问它的属性了 obj.b = obj.a + obj.a; console.log(obj.b); // 输出2
方法3:用ES6类(适合更复杂的场景)
如果你的逻辑比较复杂,或者需要创建多个类似的对象,用ES6的类会更清晰。类的构造函数和方法里的this都能正确指向实例对象:
class MyObject { constructor() { // 初始化属性a this.a = 1; } // 用getter动态计算b get b() { return this.a * 2; } // 或者写成方法,主动调用获取值 calculateB() { return this.a + this.a; } } const obj = new MyObject(); console.log(obj.b); // 输出2 console.log(obj.calculateB()); // 输出2 obj.a = 5; console.log(obj.b); // 输出10
最后再强调一下:对象字面量初始化时,直接写属性值的位置里的this,指向的是当前的执行上下文(比如浏览器里的window,Node.js里的global,严格模式下是undefined),不是正在创建的对象,所以千万别在那时候直接用this引用自身属性哦~
内容的提问来源于stack exchange,提问作者soarinblue
相关产品推荐
相关产品推荐

