如何阻止Coffeescript转义关键字?

时间:2013-08-02 19:01:52

标签: coffeescript escaping keyword

我正在尝试编写一个indexeddb函数“delete”。它应该在JS中这样读:

var transaction = db.transaction('objectStore','readwrite');
var objectStore = transaction.objectStore('objectStore');
objectStore.delete(id);

但是,当我在CS中写它时:

transaction = db.transaction 'objectStore','readWrite'
objectStore = transaction.objectStore 'objectStore'
objectStore.delete(id)

当然它输出:

...
objectStore["delete"](id);

我没有为IDBTransaction编写一个名为“delete”的方法,但我必须使用它。如何让CS逃避“删除”方法并将其转换为对象中的“删除”键?

2 个答案:

答案 0 :(得分:3)

使用反引号传递裸Javascript:

`objectStore.delete(id)`

将通过逐字汇编。在我最喜欢的网站上尝试在CS和JS之间进行解释:http://js2coffee.org/#coffee2js

transaction = db.transaction 'objectStore','readWrite'
objectStore = transaction.objectStore 'objectStore'
`objectStore.delete(id)`

变为

var objectStore, transaction;

transaction = db.transaction('objectStore', 'readWrite');

objectStore = transaction.objectStore('objectStore');

objectStore.delete(id);

答案 1 :(得分:3)

为什么你关心JavaScript版本是objectStore["delete"](id)?这与objectStore.delete(id)相同。

例如,如果你在CoffeeScript中这样说:

class B
    m: (x) -> console.log("B.m(#{x})")
class C extends B

c = new C
c.m('a')
c['m']('b')

最后两行是这个JavaScript:

c.m('a');
c['m']('b');

但他们都采用相同的方法。

演示:http://jsfiddle.net/ambiguous/XvNzB/

同样,如果你在JavaScript中这样说:

var o = {
    m: function(x) { console.log('m', x) }
};
o.m('a');
o['m']('b');

最后两行调用相同的方法。

演示:http://jsfiddle.net/ambiguous/Y3eUW/