Javascript 如果对象的成员之间存在依赖关系,是否可以使用文字符号初始化对象?

Javascript 如果对象的成员之间存在依赖关系,是否可以使用文字符号初始化对象?,javascript,dependencies,object-literal,Javascript,Dependencies,Object Literal,假设我有一个这样的物体 a = {b = function() { return 1 }, c: 2, f: 3} a.z = a.b() 有没有一种方法可以把它写在一个对象文字符号的赋值中?类似于: a = {b: function() { return 1 }, c: 2, f: 3, z: this.b()} 显然,这是行不通的,因为这个仍然绑定到定义对象的范围,而不是对象本身a.b()也不起作用,因为a尚未定义 实际上,我正在使用CoffeeScript,但我非常确定,如果有一种聪明

假设我有一个这样的物体

a = {b = function() { return 1 }, c: 2, f: 3}
a.z = a.b()
有没有一种方法可以把它写在一个对象文字符号的赋值中?类似于:

a = {b: function() { return 1 }, c: 2, f: 3, z: this.b()}
显然,这是行不通的,因为
这个
仍然绑定到定义对象的范围,而不是对象本身
a.b()
也不起作用,因为
a
尚未定义


实际上,我正在使用CoffeeScript,但我非常确定,如果有一种聪明的方法在纯JavaScript中实现这一点,那么CoffeeScript中的内容也会变得更短,更“功能性”。

您可以利用JS的泄漏赋值,从对象文本中记忆另一个变量的属性值:

a = { b: b = function() { return 1 }, c: 2, f: 3, z: b() };

请注意,如图所示,b是一个全局函数,因此您可能应该使用类似“var b,a=”(如图所示的其余代码)的内容来防止泄漏。

我能想到的唯一方法是在对象外部声明函数。JavaScript的奇特之处在于它如何分配
这个
范围。点左侧的对象实际上是函数中的该对象。因此,如果需要,您仍然可以方便地使用
this.c
。因为你的对象没有任何“私有”属性,我个人坚持这一点。