我想模拟出MarkdownDeep,下面的代码在JavaScript中
MarkdownDeep = new (function () {
this.Markdown = function () {
this.Transform = function (a) {
return "html";
};
};
})();
但是我在CoffeeScript中实现它有困难
我尝试了以下
MarkdownDeep = new (->
@Markdown = ->
@Transform = (a) ->
"html"
)()
window.MarkdownDeep = MarkdownDeep
但它不起作用,特别是在我的单元测试中,markdown = new MarkdownDeep.Markdown()给出“未定义不是函数”,尽管JS版本模拟得很好.
解决方法:
您的示例生成以下javascript代码:
var MarkdownDeep;
MarkdownDeep = new (function() {
return this.Markdown = function() {
return this.Transform = function(a) {
return "html";
};
};
});
window.MarkdownDeep = MarkdownDeep;
该行返回this.Markdown = function(){/ * … * /}使函数成为new运算符返回的对象.
写作
MarkdownDeep = new (->
@Markdown = ->
@Transform = (a) ->
"html"
return
return
)
window.MarkdownDeep = MarkdownDeep
解决问题.
加成:
This answer提到了JavaScript中用于对象构造的算法