How to stop Coffeescript from escaping keywords?

99封情书 提交于 2019-12-25 14:20:08

问题


I am trying to write a indexeddb function "delete". It should read like this in JS:

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

However, when I write it in CS:

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

Of course it outputs:

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

I didn't write a method for IDBTransaction called "delete", but I have to use it. How can I keep CS from escaping the "delete" method and turning it into a "delete" key in an object?


回答1:


Use backticks to pass through bare Javascript:

`objectStore.delete(id)`

will be compiled through verbatim. Try it here at my favorite site for interpreting between CS and JS: http://js2coffee.org/#coffee2js

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

becomes

var objectStore, transaction;

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

objectStore = transaction.objectStore('objectStore');

objectStore.delete(id);



回答2:


Why do you care that the JavaScript version is objectStore["delete"](id)? That's the same as objectStore.delete(id).

For example, if you say this in CoffeeScript:

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

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

The last two lines come out as this JavaScript:

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

but they both call the same method.

Demo: http://jsfiddle.net/ambiguous/XvNzB/

Similarly, if you say this in JavaScript:

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

The last two lines call the same method.

Demo: http://jsfiddle.net/ambiguous/Y3eUW/



来源:https://stackoverflow.com/questions/18024306/how-to-stop-coffeescript-from-escaping-keywords

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!