0

假设我有一个像这样的对象

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 中也会看起来更短且更“功能化”。

4

1 回答 1

2

您可以利用 JS 的泄漏分配将属性的值从对象字面量中记忆到另一个变量:

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

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

于 2013-04-29T20:32:07.170 回答