2015年11月17日 星期二

dojo/_base/lang

簡介

dojo/_base 目錄下包含了眾多的模組,這些模組是整個 dojo 的基石,支撐著整個 dojo 的架構。其中的 dojo/_base/lang 基本上是一個用來擴充 Javascript 語言功能的一個模組。其所提供的函式多用在 Javascript 物件及物件屬性的操作上。 列示常用的函式如下:

  • exists()
  • setObject()
  • getObject()
  • clone()
  • mixin()
  • delegate()
  • hitch()
  • partial()
  • replace()
  • trim()

這段介紹三個函式:

exists(path, obj)
測試物件 obj 中是否存在著名為 path 的屬性。path 可以是由 "." 分隔的字串,dojo 會延著節點測試屬性值是否為 undefined,直到產生結果為止。若路徑最終的屬性存在時,傳回 true;若路徑中任一節點值為 undefined 時,則傳回 false。 obj 參數在沒有指定時,預設為全域變數 - window 物件。
setObject(path, value, obj)
設定物件中某一屬性的值,若路徑中有任一屬性節點尚未定義,則建立該屬性,一直到路徑中所有的屬性都存在後,將 value 指派給該屬性值。
getObject(path, boolean)
從全域變數 window 為起點,取得 path 路徑中的值。boolean 預設為 false,若路徑所指定的物件不存在,則傳回 undefined。當 boolean 設定為 true 時,,也用全域變數 window 做為路徑的起點,逐一建立路徑中的所有屬性後,最終傳回一個空物件 {}。

setObject() 和 getObject() 乍看之下,很像一般的 setValue() 和 getValue() 函式對。其實不然,setObject() 和 getObject() 兩者在用法上和傳入的參數,都有很大的不同,這點要特別留意。

Script


第 24 行的結果之所以會是 false,是因為在 function() 中(第 8 行)用 var obj 來定義 obj,因此 obj 只存在於 function() 中,並非 global 變數,因此不會加到全域變數 window 之下。第二個參數又沒設定,預設為 window。此時,window 下並沒有 obj 這個變數,因此傳回值為 false。
第 27 行的 getObject() 第二個參數值為 false,所以不會自動建立物件,因此傳回值為 undefined。 第 28 行的 getObject() 第二個參數值為 true,而路徑所指定的物件並不存在,所以會在全域變數 window 下自動建立該物件,並傳回一個空物件 - {}。

由第 29 行可以理解到第 28 行的物件己經被建立在全域變數 window 之下。

沒有留言:

張貼留言