摘要:創建類中并沒有真正的類,但中有構造函數和運算符。任何函數都可以用作構造函數,構造函數必須使用運算符作為前綴來創建新的實例。調用構造函數時不要丟掉關鍵字。這里使用基于原型的繼承,而沒有用到構造函數和關鍵字。
1.創建類
JavaScript中并沒有真正的類,但JavaScript中有構造函數和new運算符。構造函數用來給實例對象初始化屬性和值。任何JavaScript函數都可以用作構造函數,構造函數必須使用new運算符作為前綴來創建新的實例。
new運算符改變了函數的執行上下文,同時改變了return語句的行為。實際上,使用new和構造函數很類似于傳統的實現了類的語言:
var Person = function (name) { this.name = name; }; //實例化一個Person var alice = new Person("alice"); //檢查這個實例 assert(alice instanceof Person);
如果不使用new運算符而是:Person("bob";)這個函數只會返回undefined,并且執行上下文是window(全局)對象,無意間創建了一個全局變量name。調用構造函數時不要丟掉new關鍵字。
2.給類添加函數在JavaScript中,在構造函數中給類添加函數和給對象添加屬性是一樣的:
Person.find - function (id) {}; var person = Person.find(1);
要想給構造函數添加實例函數,則需要用到構造函數的prototype:
Person.prototype.breath = function(){}; var person = new Person; person.breath();3.取消事件
當事件冒泡時,可以通過stopPropagation()函數來終止冒泡,這個函數是event對象中的方法。比如這段代碼,任何父節點事件回調都不會觸發:
button.addEventListener("click", function (e) { e.stopPropagation(); }, false);4.事件對象
和上面提到的函數stopPropagation()和preventDefault()一樣,event對象還包含很多有用的屬性。
事件類型 | 含義 |
---|---|
bubbles | 表示事件是否通過DOM以冒泡形式觸發 |
button | 表示鼠標所按下的按鈕 |
ctrlKey | 表示Ctrl鍵是否按下 |
altKey | 表示alt鍵是否按下 |
shiftKey | 表示Shift鍵是否按下 |
metaKey | 表示Meta鍵是否按下 |
isChar | 表示當前按下的鍵是否表示一個字符 |
charCode | 表示當前按鍵的unicode值 |
keyCode | 表示非字符按鍵的unicode值 |
which | 表示當前案件的unicode值,不管當前按鍵是否表示一個字符 |
pageX,pageY | 事件發生時相對于頁面的坐標 |
screenX,screenY | 事件發生時相對于屏幕的坐標 |
currentTarget | 事件冒泡階段所在的當前DOM元素 |
target,originalTarget | 原始的DOM元素 |
relatedTarget | 其他和事件相關的DOM元素 |
從事件冒泡開始就發生了事件委托,我們可以直接給父元素綁定事件監聽,用來檢測在其子元素內發生的事件。
//在ul列表上做了事件委托 list.addEventListener("click", function (e) { if (e.currentTarget.tagName == "li") { return false; } }, false);6.原型繼承
這里使用Object.create()來構造我們的ORM。這里使用基于原型的繼承,而沒有用到構造函數和new關鍵字。
Object.create()只有一個參數即原型對象,它返回一個新對象,這個新對象的原型就是傳入的參數。換句話說,傳入一個對象,返回一個繼承了這個對象的新對象。
有些瀏覽器沒有Object.create()方法,比如IE,可以模擬出該函數:
if (typeof Object.create !== "function") { Object.create = function (o) { function F() { } F.prototype = o; return new F(); } }7.JSONP
JSONP(JSON with padding),這是另一種從遠程服務器抓取數據的方式。原理是通過創建一個script標簽,所轄的外部文件包含一段JSON數據,數據是由服務器所返回的,作為參數包裝在一個函數調用中。script標簽獲取腳本文件并不受跨域限制,所有瀏覽器都支持這種技術。
8.localstorage用法//設置一個值 localStorage["someData"] = "wem"; //存儲數據的個數 var itemsStored = localStorage.length; //設置一個項(是一種hash寫法) localStorage.setItem("someData", "wem"); //得到一個已經存儲的值,如果不存在就返回Null localStorage.getItem("someData");//"wem"; //刪除一個項,如果不存在就返回null localStorage.removeItem("someData"); //清空本地存儲 localStorage.clear();
數據均存儲為字符串,所以如果你想保存的數據是對象或數字,則必須自己做類型轉換,如果使用JSON的話,則需要將對象先做序列化處理再保存它們,從本地存儲中讀取JSON時也需要將它轉換為對象:
var object = {some: "boject"}; //序列化并保存一個對象 localStorage.setItem("seriData", JSON.stringify(object)); //讀取并將JSON轉換為對象 var result = JSON.parse(localStorage.getItem("seriData"));9.動態渲染視圖
var views = document.getElementById("views"); views.innerHTML = "";//將元素內容清空 var container = document.createElement("div"); container.id = "user"; var name = document.createElement("span"); name.innerHTML = data.name; container.appendChild(name); views.appendChild(container);10.無交互行為內容的閃爍(FUBC)
有時候用戶可能會看到頁面閃了一下,出現一部分沒有交互行為的內容快速閃過(FUBC),比如在JavaScript執行之前會有一部分無樣式的頁面原始內容閃爍一下。如果你不依賴JavaScript來修改初始頁面的樣式,問題其實并不嚴重。但是如果依賴JavaScript來操作樣式,則需要將樣式提取出來放入初始化CSS之中,比如隱藏一些元素或展示一個加載指示器,指示頁面正在加載中。
11.獲取文件信息HTML5的文件操作有一定的安全限制,主要的限制是只有被用戶選中的文件才能被訪問。將文件拖曳至瀏覽器中、選擇要輸入的文件或將文件粘貼至Web應用中,這些操作當然可以滿足這一安全限制。盡管已經有人實現了“基于JavaScript的文件系統”,但這里的訪問都是基于沙箱的。顯然,允許JavaScript無限制的操作文件會帶來很嚴重的安全風險。
在HTML5中使用File對象來表示文件,它有三個屬性:
name:文件名,這是一個只讀字符串;
size:文件大小,這是一個只讀的整數;
type:文件的MIME類型,是一個只讀字符串,如果類型沒有指定就是空字符串;
出于安全的原因,文件的路徑是無法得到的。
12.拖曳拖曳的實現非常簡單。可以將元素的draggable屬性設置為true來啟用元素的拖曳。
WebSocket是HTML5規范的一部分,提供了基于TCP的雙向的、全雙工的socket連接。這意味著服務器可以直接將數據推送給客戶端,而不需要開發者求助于長輪詢或插件來實現。和之前的服務器推的技術相比,WebSocket有著巨大的優勢,因為WebSocket是全雙工的,而不是基于HTTP的,一旦建立鏈接就不會斷掉。
14.性能提高性能:減少HTTP請求的數量。每一個HTTP請求除了有TCP開銷以外,還包含了大量的頭信息。保持最小的獨立連接數可以保證用戶的頁面家在速度更快。
將多個腳本文件合并成為一個腳本文件,或將多個CSS合并成為一個樣式表,能減少頁面渲染所需的HTTP連接的數量。可以在部署或運行時這樣做。
使用CSS Sprites技術合并多張小圖成為一張大圖,然后使用CSS的background-image和background-position屬性在頁面中顯示對應的圖片。只需要設定圖片要顯示的尺寸和背景位置的偏移坐標。
避免重定向也是減少HTTP請求的數量的方法。
理解瀏覽器如何下載資源也很重要。為了加快頁面渲染,現代瀏覽器并行下載所需的資源。但是,在所有的樣式表和腳本下載完成之前,頁面是不會開始渲染的。
script標簽的defer屬性:設置defer的腳本將和其他資源一起并行下載,它們是不會阻塞頁面的渲染。HTML5還引入了一個新的腳本下載和執行的模式,稱作async。通過設置async屬性,腳本將在完成下載后等待合適的時機執行代碼。這意味著有可能異步不會按照它們在頁面中出現的順序執行代碼,這又可能導致腳本執行如有依賴順序時出錯。如果腳本沒有依賴關系,async則是很有用的。
15.緩存緩存就是將最近請求的資源存儲到本地,以便接下來的請求能從磁盤中使用這些資源,而不用再次去下載。
針對靜態資源,可以通過添加一個表示“在很遠的將來才過期”的Expires頭,讓緩存“永不”失效。這將保證瀏覽器只會下載一次該資源。所有的靜態資源文件都應該這樣設置,包括腳本、樣式表和圖片。Expires: Thu, 20 March 2015 00:00:00 GMT建議相對于當前日期設置一個表示“很遠的將來”的失效日期。
但是如果想在那個時間之前讓資源過期怎么辦?在引用資源文件的URL查詢參數中添加文件的修改時間。這樣一來,任何時候文件被修改,資源文件的URL都會改變,也即清除了緩存。
HTTP1.1引入了一類新的頭,Cache-Control。它帶給開發者更高級的緩存,同時還彌補了Expires的不足。Cache-Control的控制頭信息有很多選項,可用逗號隔開:Cache-Control:max-age=3600, must-revalidate
Cache-Control參數:
參數 | 含義 |
---|---|
max-age | 指定資源的最大有效時間。和Expires不一樣的是,該指令是相對于該請求的時間。 |
public | 標記資源是可被緩存的,默認情況下,通過SSL或使用HTTP認證后訪問的資源,緩存是關閉的 |
no-store | 完全關閉緩存,動態內容才會更多的使用這個選項 |
must-revalidate | 告訴緩存它們必須遵循任何你給定的信息,并基于這些信息來判斷資源的新舊程度 |
JavaScript源碼壓縮是從腳本文件中刪除不必要的字符,它不改變功能。樣式表和HTML文件也可以被壓縮。
17.Gzip壓縮在Web上Gzip是最流行并且支持最廣泛的壓縮方式。
18.使用CDN內容分發網絡(或叫CDN)為你的站點提供靜態資源內容服務,以減少它們的加載時間。用戶和Web服務器之間的距離對加載時間有直接的影響。CDN將你的內容部署在跨越多個地理位置的服務器上,故當用戶發起一個請求時,可從就近的服務器得到響應資源。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79987.html
摘要:當然,這只是結合自己項目的工程結構和特點設置的一套使用方式,僅供參考開發富文本編輯器的教訓由于項目的時間較緊張,我在頁面上應用了框架的背景下,想當然的想要把也應用于富文本編輯器的開發,事實證明這是不太可行的。 此文已由作者劉詩川授權網易云社區發布。 歡迎訪問網易云社區,了解更多網易技術產品運營經驗。 最近我們的產品有一個需求是要在PC端做一個面向用戶的書評編輯器,讓用戶和編輯在蝸牛讀書...
摘要:初級書單深入理解人評價作者徐濤出版社機械工業出版社出版年年月日贊回復添加到豆列來自豆瓣讀書響應式設計人評價作者出版社人民郵電出版社出版年年月日贊回復添加到豆列來自豆瓣讀書深入淺出中文版人評價作者馬勞克林出版社東南大學出版社出版年年月 初級書單 深入理解Bootstrap 7.0 (65人評價)作者: 徐濤 出版社: 機械工業出版社 出版年: 2014-52015年1月19日 贊 回復添...
摘要:初級書單深入理解人評價作者徐濤出版社機械工業出版社出版年年月日贊回復添加到豆列來自豆瓣讀書響應式設計人評價作者出版社人民郵電出版社出版年年月日贊回復添加到豆列來自豆瓣讀書深入淺出中文版人評價作者馬勞克林出版社東南大學出版社出版年年月 初級書單 深入理解Bootstrap 7.0 (65人評價)作者: 徐濤 出版社: 機械工業出版社 出版年: 2014-52015年1月19日 贊 回復添...
摘要:初級書單深入理解人評價作者徐濤出版社機械工業出版社出版年年月日贊回復添加到豆列來自豆瓣讀書響應式設計人評價作者出版社人民郵電出版社出版年年月日贊回復添加到豆列來自豆瓣讀書深入淺出中文版人評價作者馬勞克林出版社東南大學出版社出版年年月 初級書單 深入理解Bootstrap 7.0 (65人評價)作者: 徐濤 出版社: 機械工業出版社 出版年: 2014-52015年1月19日 贊 回復添...
閱讀 2822·2023-04-26 01:00
閱讀 753·2021-10-11 10:59
閱讀 2981·2019-08-30 11:18
閱讀 2677·2019-08-29 11:18
閱讀 1022·2019-08-28 18:28
閱讀 3014·2019-08-26 18:36
閱讀 2135·2019-08-23 18:16
閱讀 1069·2019-08-23 15:56