突發奇想想看下sina微博的js用的是啥框架,就看了下,應該是自己寫的吧,js檔案幸好沒有混淆,僅用了下壓縮,才有此文進行了分析(既然沒混淆也就是公開的意思吧
核心方法 register
類似jquery中的extend,在命名空間下註冊,不同之處在於為的是創造多個命名空間,jquery則只是擴充套件到其內部或jquery物件中.
that則相當於基類構造器,提供一些基本方法和引入引數,後文中register的方法均使用that作為引數,基本上所有方法內的引數均由that帶入
由maker傳入的方法,均為that引數,並返回乙個function物件,這個function物件就繫結在curr之下,最終return that,也就是stk.(這裡的register用var宣告,為啥允許外部訪問呢?繼續看下去就知道啦)
stk物件本身提供一些基本公用方法,包括e(簡單選擇器),addevent(事件繫結)等,隨後可以通過register方法擴充套件.這裡的stk採用了匿名函式+直接執行的方式來初始化,後面還有類似的初始化方式
var stk=(function()
var ....
var register=function()
that.***=function()
return that
})();
這裡為啥要區分私有和that呢,這時候出現問題了,好,我們上面的分析基本正確,但是大方向錯誤,按理說,stk.register()是通過var宣告,外部環境無法訪問的,那怎麼實現呢,繼續看下面有個that.register,這才是真正允許外部呼叫的註冊方法,方法補償,直接粘過來好了
that.register= function(ns,maker,shortname) ;
lastpoint=spec.importcachelist.length;
checkdepend()
}; 這裡有個關鍵方法是checkdepend,看看他在做什麼
在spec.dependcachelist中遍歷,查詢遍歷,其中checkpath的作用是逐級檢查該命名空間下指定物件是否定義,若未定義則返回false,這裡用的bool值好奇怪,如果checkpath中發現乙個不存在的,立即返回false,外部確定為true,即執行loaded=false,這裡checkpath叫做checkpathisnull更準確一些.
另外特意去試了一下,私有register中的var curr=that;對curr的操作可以影響到that的值,即此處是引用變數,並非在內部命名空間建立變數後操作,這樣私有register中繫結方法的操作會影響that也說得通了,附個實驗**
var a=function();
var a_fun=function(x)
that.call_fun=function()
return that;
};var x=a();
x.call_fun(); //結果是 i am temp
這樣最後that就成為了擁有一定量基礎方法,且可以通過register繫結多級命名空間的物件,大概會成為如下類似結構
that(wbtoptray)=,
regshort:function(){},
......
core:
storage:function(){}
},dom: }
..... }
} 頂級命名空間為that,也就是最終返回的wbtoptray,其下公用方法若干,按功能劃分的各個方法分布在core之下,例如core.util.browser等等
另外wbtoptray之下還有大量的私有屬性和方法,沒有做太詳細的分析
判定wbtoptray是否存在,存在則呼叫init方法初始化,傳入trayconfig作為引數,
其中包含一些延時載入,緩解頁面載入速度等等ooxx各種操作啦
js框架基本都在向動態載入和命名空間這兩個趨勢上發展,自身可以封裝的方法都大同小異差不多,執行效率問題呢經過一定時間的研究和瀏覽器自身優化也都解決的差不多了,剩下就是看誰的結構更優雅,在檔案載入上更快.
說說新浪微博資料分析
微博資料分析可深可淺,要想推測博主的經營策略則需要資料跟蹤一段時間,最少的時間是乙個星期。微博要實行實名制,這一舉措對微博的健康發展作用很大,網jczhguzbz絡文化受到重視,微博營銷也勢必會越來越受重視,對微博進行資料分析有利於我們更好的去做微博,那麼收集微博資料具體收集什麼呢?從資料上看又能看...
新浪微博授權
一.建立應用 2.進入我的應用 3.建立應用 二.oauth的授權流程 你所開發的應用需要的流程如下 2.得到request token後重定向使用者到服務商的授權頁面 3.如果使用者選擇授權你的應用,用request token向服務商請求換取access token 4.得到access tok...
轉 新浪微博OAuth認證流程分析
第一步,通過已知的consumer key和consumer secret獲取request token以及request token secret。1 2 3 4 5 privatefunctiongetrequesttoken 這裡的 request token為這個方法不用提供給外部呼叫,所以...