今天我們要再度從比較宏觀的角度來看套件
今天想focus在參數這件事情
一般來說,我們會用$.extend來融合各種參數。
但實際上,參數有幾個層面。
不是最後用一個$.extend就跟救世主一樣解決一切問題。
參數我覺得有三種
名稱只是我自己依照語意適當與否取的
1.預設值。 //系統內建,可被覆蓋。
2.設定值。 //外部傳入的設定。
3.內定值。 //系統內建,不可被覆蓋。
當使用extend的時候,考慮到extend的特性
理應如此安排:
var 運算值 = $.extend(預設值,設定值,內定值) ;
得出"運算值",也就是執行程式時,實際上使用的。
關於內定值,有兩種設計方式。
一種是完全不參與$.extend的融合大會,單純的在使用的時候
直接拿另外一個物件來使用。
另一種是參與$.extend的融合大會,這樣之後
在撰寫套件時,就可以直接用運算值這個物件得出所有的資源。
基本上第二種比較好。
此外,在處理參數的時候
也常常遇到,外部的一個設定值,會一次影響三四個預設值。
這種狀況是有一個參數可以調"模式"的時候會發生。
可能一次改變了顏色、字體大小等等
所以,結論就是extend不是萬能的
依舊要有一段程序,專門負責"運算值"的生成!
有了這樣的觀念
我連帶把我平常寫套件的寫作習慣帶進來。
如果有一個套件是$(selector).pg() ;
對我來說,也滿有可能有$.pg() 這樣的執行方法。
我給自己設下了一個小小的限制,減少思維與開發的複雜程度。
就是$.pg() ;只有兩種用法。
$.pg(‘方法’, {參數}) ;
$.pg({參數}) ;
第一種的強度等同於設定值,但也只是修飾方法的參數。
第二種,是把方法名稱省略了
所以實際上是$.pg(‘init’, {參數}) ;
這時候,參數就應該寫入預設值。
但之後如果有設定值,依舊可以蓋過。
有一個小小的問題
既然$.pg跟 $.fn.pg的功用不同。
那他們還是共用同一個"運算值"嗎?
我目前是分開存的。
一個是$[pg].settings
一個是this.settings
但是的確在製作this.settings的時候,會去參考$[pg].settings,而內定值則是共用的。