如何在javascript中使用对象内部的object属性

如何在javascript中使用对象内部的object属性,javascript,Javascript,如何在对象内部使用对象的属性,如下所示: var obj = { a: 1 b: this.obj + this.obj.a } 如果您想让对象具有computed属性,请考虑将其与面向对象类中的getter类似 您可以执行以下操作: var obj = { a: 1, b: 2, c: () => this.a + this.b } 稍后,您可以访问obj.c()以获得所需的值。您的问题让我想到了“为什么不使用值和getter创建一个对象”-对于您的需求来说,

如何在对象内部使用对象的属性,如下所示:

var obj = {
  a: 1
  b: this.obj + this.obj.a

}

如果您想让对象具有
computed
属性,请考虑将其与面向对象类中的
getter
类似

您可以执行以下操作:

var obj = {
  a: 1,
  b: 2, 
  c: () => this.a + this.b
}

稍后,您可以访问
obj.c()
以获得所需的值。

您的问题让我想到了“为什么不使用值和getter创建一个对象”-对于您的需求来说,这可能是一个过火的问题,但我不得不想一想:)

/*
**此函数通过重写第一个对象的值来创建对象
**对象作为“值属性”(表示值保持原样,但
**可以像属性一样访问和修改),而第二个对象
**需要充当getter的函数,这些函数可以访问这些值
**在第一个对象中定义,以及从其自身定义的getter。
*/
const LetsBeLazy=函数(值,惰性){
for(让输入值){
Object.defineProperty(这个,键{
值:值[键],
对,,
可写:对
});
}
for(输入lazy){
Object.defineProperty(这个,键{
get:lazy[key]
});
}
归还这个;
}
//通过以下无意义的示例了解要点:)
var obj=LetsBeLazy({
//这些值保持不变,并且可以保持不变
//使用属性表示法从外部访问和更改
名字:“约翰”,
姓氏:“Doe”,
称呼:'先生',
buildFullName:(random)=>`${Salitation}${firstName}${lastName}(${random})`
}, {
//这些函数是惰性计算的,可以访问其他getter
//以及来自上一个对象的值-请注意
//它们是属性,不能像函数一样调用。
sayHello:()=>`Hello${buildFullName(Math.ceil(Math.random()*10))}`,
sayHelloWithABang:()=>`${sayHello}`
});
编写(obj.sayHello+“
”); obj.firstName='Jane'; obj.称呼语=‘夫人’; 文件。书写(obj.sayHelloWithABang+“
”;
document.write(obj.buildFullName('X')+“
”)您不能引用尚未创建的对象

需要帮忙吗

var obj = {
  a: 1
}
obj.b = obj + obj.a

这将产生与您从上面的代码中所期望的结果相同的结果。

在初始化对象之前,您不能像这样引用它的其他属性。要么在对象初始化后的后续行上赋值,要么在IIFE中使用相同的策略。
this.obj
将是
未定义的
,除非
this
是全局对象且
obj
是全局变量。您是想在每次访问
b
时,还是在构建对象时再次计算它?