參考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