我想围绕 Javascript 的本机Date
对象类型编写一个包装器。对于该日期的每个本地属性,我只想将其代理为我班级拥有的日期。我正在使用咖啡脚本,除了更改日期对象的任何方法外,一切似乎都有效。我想知道我是否错误地设置了绑定。
这是我到目前为止所拥有的。如果您检查它编译成的内容(修改为与 JSLint 一起玩,但行为与我在浏览器中看到的相同),您可以看到它的行为:http: //jsfiddle.net/XRgKM/1/
class CP.MyDate
@DateProperties: (name for name in Object.getOwnPropertyNames(window.Date.prototype) when _.isFunction(window.Date.prototype[name]))
constructor: (@date = new Date()) ->
# Hack to allow me to use the __bind function like the rest of the
# 'coffeescript native' class functions:
bnd = `__bind`
for name in MyDate.DateProperties
bnd(@[name], @)
# Validate parameter:
if not @date instanceof Date
throw new Error("date must be a native date")
# Copy date locally:
@date = new Date(@date)
test: () => alert("TEST")
for name in @DateProperties
MyDate.prototype[name] = () ->
returnVal = @date[name].apply(@date, arguments)
if returnVal isnt @date and returnVal instanceof Date
returnVal = new MyDate(returnVal)
return returnVal