如何重现正确的JavaScript对象文字属性,该属性是CoffeeScript中的匿名函数

How to reproduce correct JavaScript object literal property that is an anonymous function from CoffeeScript?

本文关键字:属性 CoffeeScript 函数 何重现 JavaScript 对象 文字      更新时间:2023-09-26

我有以下有效的javascript:

App.Person = DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
birthday: DS.attr('date'),
fullName: function() {
    return this.get('firstName') + ' ' + this.get('lastName');
  }.property('firstName', 'lastName')
});

根据 js2coffee.org 这个js相当于下面的咖啡脚本:

App.Person = DS.Model.extend(
  firstName: DS.attr("string")
  lastName: DS.attr("string")
  birthday: DS.attr("date")
  fullName: ->
    @get("firstName") + " " + @get("lastName")
  .property("firstName", "lastName")
)

但是,相同的咖啡脚本不会编译回有效的javascript。 它甚至不是有效的咖啡脚本,因为它错误为"意外"。'"

如何编写有效的咖啡脚本来创建与上面列出的相同或语法等效的JavaScript?

Coffeescript:

App.Person = DS.Model.extend(
  firstName: DS.attr("string")
  lastName: DS.attr("string")
  birthday: DS.attr("date")
  fullName: ( ->
    @get("firstName") + " " + @get("lastName")
  ).property("firstName", "lastName")
)

编译为:

App.Person = DS.Model.extend({
  firstName: DS.attr("string"),
  lastName: DS.attr("string"),
  birthday: DS.attr("date"),
  fullName: (function() {
    return this.get("firstName") + " " + this.get("lastName");
  }).property("firstName", "lastName")
});

无论如何可以这样吗:

class App.Person extends DS.Model
    name: DS.attr

我知道它不适用于这种语法,但我想使用 Coffee 的类语法