avalon的所有操作都是圍繞vm進行。 vm,亦即view model,視圖模型。 隻要我将一個JS對象添加一個$id屬性, 再放到avalon.define方法裡面,就能得到一個vm。
例如:
var vm = avalon.define({
$id: "start",
name: "test"
})
vm是一種利用Proxy或 Object.defineProperties或VBScript建立的特殊對象。
裡面以$ 帶頭的屬性 或放到 $ skipArray,都轉換為通路器屬性,也就是其他語言的setter, getter。是以如果這個屬性最初沒有定義,那麼它就不會轉換為通路器屬性,修改該屬性,就不會重新整理視圖。
- 超輕量 Object.create(null)
- 輕量 一般的對象 {}
- 重量 帶有通路器屬性的對象, avalon VM對象
- 超重量 各種節點或window對象
- 我們建構VM時隻允許存在普通對象(不能是某個函數的執行個體),函數,數組,數字,字元串,布爾,其他一切不支援(undefined與null不能出現在定義VM時,隻能用它們來指派)