寫自己的JS框架 - 原理,原則篇


自從ajax技術興起之后,開源界就出現了很多著名的JS框架。包括Google的Gmap等一系列,雅虎的YUI,還有就Jquery, Prototype等。使用這些框架就可以用簡單的代碼來實現豐富多彩的功能,有很多甚至是采用了類似面向對象的編程風格。

其實只要了解了Javascript的相關基礎知識,我們完全可以自己寫一個JS框架出來。本文介紹了搭建JS框架的基本原則。(ITcast上的教程-構建自己的JS庫的學習筆記)

 

Jquery,Prototype等框架流行的原因

 


總結原因有三:

1. 跨瀏覽器

   屏蔽了瀏覽器的不同(類型,版本),畢竟,為市面上的每一款瀏覽器編寫針對性的代碼是極其不合算的

2. 經過了嚴密的測試

   代碼的品質可以保證(這也是大多數流行的開源框架的優點)

3. 設計合理

   調用這些框架的代碼也會非常的清晰,易懂

 

因此我們自己要寫JS框架的話,也應該以上面的內容為目標。

 

 

構建注意事項

 


 

1. 不要使用瀏覽器檢測,要使用能力檢測 
“版本檢測”,“瀏覽器嗅探“是javascript最佳實踐中的錯誤用法。
我們不可能為了市面上每一款前途未卜的瀏覽器進行驗證。

 

 

瀏覽器檢測的最佳實踐:能力檢測(對象檢測) 
即在代碼執行之前,檢測某個腳本對象或方法是否存在(使用if(xxx.xxxx)的方式)。


2. 使用命名空間 
真正的命名空間在JavaScript2才支持,現在所謂的命名空間只是在腳本內部構造了一個小空間。

 

原因:避免調用多個JS庫時,出現同名函數的沖突

JavaScript支持同名函數,但只使用最后一個函數(不支持重載,不會考慮參數,只看方法名字),

哪一個最后被加載,哪一個就會被調用到。

所以不使用命名空間的話,就很容易遇到同名函數沖突的問題。

 

現行Javascript的命名空間的原理

我們調用的Javascript其實默認都是注冊在window對象上的,我們利用javascript中的對象,構建一連串的對象,並且每一個低級的對象作為上一級對象的屬性。

 

比如說,我們要使用"a.b.c"來構建一個命名空間,其實就是先構建一個名字為a的對象,然后構建一個名字為b的對象,並且把這個對象作為a的屬性,同樣把c作為b的一個屬性。即:

var a = new Object();// or var a = {};

a.b = new Object();

a.b.c = new Object();

 

 

使用命名空間的兩點原則:唯一性,不共享



唯一性

挑選一個獨一無二的命名空間的名字(如Google Maps的G),注意js是大小寫敏感的

 

不共享

為了不與著名的一些庫或者其他已有的一些函數沖突,使用匿名函數。
(function () {
// your code
}) ();
匿名函數實現了代碼的不共享,該塊中的function和function內部定義的函數都不會被其他地方直接調用到。

 

一個基本的示例:

(function() {
  window['test'] = {}
  
  function $() {

    alert("function $ called!");
  }
  window['test']['$'] = $;
}) ();

function內部的代碼,第一行把test這個命名空間注冊到了window上,中間定義了一個名字為$的內部函數,最后一句把$這個方法注冊到了test這個對象上。
調用時,使用 test.$("xxx") 就可以。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM