Šim*_*das 27 javascript coffeescript
我看到了这种模式:
Money = (function() {
function Money(rawString) {
this.cents = this.parseCents(rawString);
}
});
Run Code Online (Sandbox Code Playgroud)
在这个CoffeeScript截屏预览中.(截屏视频的主页在这里.)
现在,我不明白这种模式.有一个Money包含Money函数的函数.那是什么意思?
有人能解释一下吗
T.J*_*der 17
如上所述,除了Money可以从window对象中删除外部符号之外没有任何意义(除了在IE7及以下,但这是另一个故事),因为它是一个正常(隐含)属性window(与一个var或一个符号相对)源自函数声明).但即使这样,外部Money符号也会收到一个绝对没有任何功能的功能.可能是错误引用的吗?
例如,这是一个相当标准的模式:
Money = (function() {
var someCompletelyPrivateVariable;
function doSomethingCompletelyPrivate() {
}
function Money(rawString) {
this.cents = this.parseCents(rawString);
}
return Money;
})();
Run Code Online (Sandbox Code Playgroud)
这是模块模式,它允许您拥有完全私有的变量和函数(两者都说明),同时只有一个公共符号.但是我必须编辑一点点才能创建它(最重要的编辑是return Money;最后的编辑和()匿名函数之后的添加,所以我们调用它而不是仅仅定义它.
Rig*_*red 15
使用视频声称的CoffeeScript代码是正确的转换...
class Money
constructor: (rawString) ->
@cents = @parseCents rawString
Run Code Online (Sandbox Code Playgroud)
... CoffeeScript将生成以下内容,这与@TJ Crowder的答案基本相同:
var Money;
Money = (function() {
function Money(rawString) {
this.cents = this.parseCents(rawString);
}
return Money;
})();
Run Code Online (Sandbox Code Playgroud)
我只是发布这个来展示CoffeeScript 实际上做了什么,而且视频并不代表现实.
如果您访问该网站并单击"Try CoffeeScript"按钮,则可以看到转换.
请不要不 "接受"这个答案.
编辑:
要添加一些使用范围的私有变量用法,您可以这样做:
class Money
priv=0
constructor: (rawString) ->
@cents = @parseCents rawString
@id = priv++
Run Code Online (Sandbox Code Playgroud)
......呈现为:
var Money;
Money = (function() {
var priv;
priv = 0;
function Money(rawString) {
this.cents = this.parseCents(rawString);
this.id = priv++;
}
return Money;
})();
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我对CoffeeScript一无所知.它的语法让我感到困惑,但也许只是因为我不习惯它.
我喜欢JavaScript的方式(特别是新的和未来的变化).
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |