假设我有一个像这样的对象
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()}
显然这不起作用,因为this
仍然绑定到定义对象的范围,而不是对象本身。 a.b()
不起作用,因为a
尚未定义。
我实际上正在使用CoffeeScript,但我很确定如果有一种聪明的方法可以在纯JavaScript中执行此操作,那么它在CoffeeScript中看起来会更短,更“实用”。
答案 0 :(得分:2)
你可以利用JS的漏洞分配将属性的值记忆到对象文字中的另一个变量:
a = { b: b = function() { return 1 }, c: 2, f: 3, z: b() };
请注意,如图所示,b是全局的,因此您应该使用“var b,a =”(其余代码如图所示)来防止泄漏。