参考CoffeeScript程序设计javascript
基础知识css
语法规范html
1) 用空格来表示缩进(要注意)java
2) 去掉function关键字,用 ->替代编程
3)括号,无关紧要,适当增长可读性数组
4)做用域为局部的,变量和函数框架
5)用@或者this来将匿名封装函数对外开放less
6)字符串插值,双引号中 用#{coffeescript} 用双引号表示文本字符串,coffeescript不生效异步
7) """ context """ 内容原geshi保留; #注释; ### context ### 内容注释编程语言
运算符
1) +‘100’ 将字符串转换成数字
2)?= (判断是否存在) ||= &&= (javascript not exists)
3)coffee 中 == 和 != 等同于javascript中的=== 和 !==,而javascript中的==和!=存在bug
4)? 是否认义和是否存在(undefined 或者 null)
5)借鉴Ruby中unless,还有isnt,以及内联语句 。 console.log "today" if true
6) swtich -- when -- else
函数
1) $#{val}
2) myFunction = () ->
缩进的代码块 (若是仅有一行,则直接可跟在->后面)
3) splat操做符,用...表示不肯定的多个参数,传入的参数做为字符串列表
数组
1) in 检查是否存在
2) 多重赋值和交换赋值
3)range 以及分割用..表示
4)[4..-1] = [] 再第4个为以后插入数值
散列{}
1)能够写在一行上,用{}和,号。也能够用空格,多行分割
2)能够用[]或者. 来得到属性值 (js校验框架--jslint,来获取对象中第属性)
3) 循环与迭代 用in by
迭代对象 for key,value in obj when value.length < 5
4) prototype 函数能够给系统对象添加函数或者属性值,能够用for own 仅查看本身定义的类型
5) 控制语句 while until
comprehension容许循环及代码写在一行上。 console.log letter.toUpperCase for letter in myletter
6) do 关键字,控制变量做用域。
类的支持
1) constructor(@name):->
2)constructor(@attributes):->进行重构,不须要对attributes中每一个属性进行访问,能够避免攻击
若是 constructor(@attributes):->
for key,value in @attributes
@[key] = value
则容易覆盖掉类中函数
3) 继承extends, 调用父类函数 super ,无需加参数
4)类级函数不须要实例化就能够调用,相似于静态函数,在函数名前加@
javascript原生不支持继承,coffee模拟类类和继承,因此子类中并无父类中的相关属性值
5)原型属性 prototype,在全部的对象实例上都添加一个函数或者属性,则能够用::
6)绑定(-> 与 =>) 比较难懂
javascript 是一门异步的,事件驱动的编程语言。即一触即忘,触发以后就继续执行。
回调函数丢失例原先的上下文
class User
constructor:(@name) ->
sayHi: =>
console.log "Hello #{@name}"
bob = new User('bob')
mary = new User('mary')
log = (callback) ->
console.log "about to execute callback"
callback()
console.log "---executed callback"
log(bob.sayHi)
log(mary.sayHi)
如何syaHi:-> 结果输出name是undefined,只能改成=> 经过绑定的方式将函数和该函数的上下文进行绑定
参考 understanding javascript function invocation and this. Yehuda blog.
coffeejs http://coffeescript.org/
undercore.js 和 backbone.js http://www.css88.com/doc/underscore1.5.2/
http://www.csser.com/tools/backbone/backbone.js.html