Time of Update: 2017-01-19
今天在研究某系統時發現其代碼有這樣一個結構(已簡化): 複製代碼 代碼如下: var result = false; point: { var obj = { key: 1 }; for (var key in obj) { // ... break point; } result = true; } alert(result); 咋看一下以為是代碼錯誤,甚至於Visual
Time of Update: 2017-01-19
mousedown 的時候建立拖動對象,mouseup的時候釋放對象,原理弄清楚了其實很簡單。 簡單拖拽實現代碼: 簡單拖拽實現 拖我 [Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]
Time of Update: 2017-01-19
複製代碼 代碼如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>圖形動畫</title> <style type=
Time of Update: 2017-01-19
DOM元素都有一些標準事件,一般使用時只要使用onclick=function的方式就可以了,但是當需要為DOM元素添加多個事件,刪除事件,或在用Javascript封裝控制項的時候,為封裝的控制項添加自訂事件的時候,onclick=function的方式就不夠用了,但是瀏覽器有addEventListener和attachEvent方法可供調用,從而類比出類似於C#中的事件委託的事件觸發機制! 複製代碼 代碼如下: /* * 功能:事件處理 * Author:LQB * 時間:2009-1-4
Time of Update: 2017-01-19
JQury架構絕對是頁面開發的首選,代碼短小強悍,缺點就是物件導向特性不足,所幸有不少外掛程式!至於Ext就是一個龐然大物了,高度物件導向,類似於MFC的龐大API和控制項陳列庫,運行起來,瀏覽器就累得夠嗆,開發也夠嗆,使用代碼來建立介面絕對是個糟糕的方式,Javascript的弱語言類型使得Ext開發就像行走在雷區,減少bug的唯一方法就是不要寫出bug,一旦出現bug,調試將是一件極為痛苦的事情 !在幾千行代碼裡跟蹤、跳轉真讓人抓狂!
Time of Update: 2017-01-19
Package.js項目地址:http://code.google.com/p/package-js/ Package.js是一個很方便的JavaScript包依賴管理及Make工具。它的設計目標是使瀏覽器端的JavaScript Component/App 開發更加模組化。如果您只是在開發一個小型的網站,只會混雜在HTML中寫幾行JS代碼用於改善一下使用者體驗,那麼Package.js也許並不適合您。如果您正在開發一個中到大型的WebApp,有幾十甚至幾百幾千個JS檔案和CSS檔案、
Time of Update: 2017-01-19
例如 複製代碼 代碼如下: setTimeout( function(){ alert('你好!'); } , 0); setInterval( callbackFunction , 100); 認為setTimeout中的問候方法會立即被執行,因為這並不是憑空而說,而是JavaScript API文檔明確定義第二個參數意義為隔多少毫秒後,回調方法就會被執行. 這裡設成0毫秒,理所當然就立即被執行了.
Time of Update: 2017-01-19
複製代碼 代碼如下: function fors(){ obj_a = obj_b; obj_b.attr = obj_a; } 複製代碼 代碼如下: function fors(){ obj_b = {}; obj_b.attr = obj_b; } 上面是兩個個很顯示的循環參考,IE中產生了記憶體泄露,由於IE的記憶體回收機制,導至會長期佔用記憶體而不能釋放。 但閉包的記憶體泄露,有些隱蔽。因為閉包的循環參考,是間接的。 複製代碼 代碼如下: function iememery(){
Time of Update: 2017-01-19
一、同步載入與非同步載入的形式 1. 同步載入 我們平時最常使用的就是這種同步載入形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又稱阻塞模式,會阻止瀏覽器的後續處理,停止了後續的解析,因此停止了後續的檔案載入(如映像)、渲染、代碼執行。 js 之所以要同步執行,是因為 js 中可能有輸出 document 內容、修改dom、重新導向等行為,所以預設同步執行才是安全的。 以前的一般建議是把&
Time of Update: 2017-01-19
1. 大多數遊覽器的組件構成如圖 在最底層的三個組件分別是網路,UI後端和js解譯器。作用如下: (1)網路- 用來完成網路調用,例如http請求,它具有平台無關的介面,可以在不同平台上工作 (2)UI 後端- 用來繪製類似組合選擇框及對話方塊等基本組件,具有不特定於某個平台的通用介面,底層使用作業系統的使用者介面 (3)JS解譯器- 用來解釋執行JS代碼 ps:上圖和知識點主要來自《HOW BROWSERS WORK: BEHIND
Time of Update: 2017-01-19
console.log(); 當你使用console.log()函數時,下面的firebug一定要開啟,不然這函數在用firefox運行時無效且影響正常程式,如果用IE開啟,將會出錯。 第一個參數可以是一個包含格式化預留位置輸出的字串,例如: console.log("The %s jumped over %d tall buildings", animal, count); 格式化字串 類型 %s 字串 %d, 整型 %i (暫不支援數字型) %f 浮點型 (暫不支援數字型) %o
Time of Update: 2017-01-19
1、直接建立模式。這是最簡單也是最直接的一種模式,首先建立一個參考型別的對象,然後為其添加自訂屬性和方法。範例程式碼如下: 複製代碼 代碼如下: var person = new Object(); person.name = "Sam"; person.age = 16; person.speak = function(){ alert(this.name + "is " + this.age + "years old"); } person.speak();
Time of Update: 2017-01-19
複製代碼 代碼如下: txt1.onkeydown = function(ev){ var oevent = ev||event; if(oevent.ctrlKey && oevent.keyCode == 13){ …… } } txt1:綁定事件的對象,例如:一個文本輸入框input。 oevent:事件對象(包含事件的很多有用詳情)。 keyCode:可以擷取到鍵盤按下的索引值。例如:斷行符號鍵就是13。
Time of Update: 2017-01-19
複製代碼 代碼如下: function obj2str(o){ var r = []; if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\""; if(typeof o == "object"){ if(!o.sort){ for(var i in o)
Time of Update: 2017-01-19
先說一種最普遍的思路: 把圖片們用ul之類的包起來,並設定float。然後設定這個ul本身為absolute定位,其父標籤用relative定位。通過設定ul的left或top值,實現圖片隊列的滾動效果 特點: 只操作一個html元素(即上文的ul),對系統開銷小;滾到頭會復原;從大序號滾動到小序號也會復原;從最後序號滾動到第一個,會“咻”的一下把所有中間的圖片也路過一次。 另一種思路就是我在XScroll.js裡實現的思路,所有圖片用絕對位置。具體看那篇文章吧。
Time of Update: 2017-01-19
我們先看一段傳統的繼承代碼: 複製代碼 代碼如下: //定義超類 function Father(){ this.name = "父親"; } Father.prototype.theSuperValue = ["NO1","NO2"]; //定義子類 function Child(){ } //實現繼承 Child.prototype = new Father(); //修改共用數組 Child.prototype.theSuperValue.push("修改"); //建立子類執行個體
Time of Update: 2017-01-19
這本書中第一個重要的內容就是介面。大家對介面應該都不陌生,簡單的說介面就是一個契約或者規範。在強型別的面相對象語言中,介面可以很容易的實現。但是在javascript中並沒有原生的建立或者實現介面的方式,或者判定一個類型是否實現了某個介面,我們只能利用js的靈活性的特點,類比介面。 在javascript中實現介面有三種方式:注釋描述、屬性驗證、鴨子模型。 note:因為我看的是英文書,翻譯水平有限,不知道有些詞彙如何翻譯,大家只能領會精神了。 1. 注釋描述 (Describing
Time of Update: 2017-01-19
本文分上下兩部分,上部講基本模式(basic patterns):完全暴露法,底線標記法和使用閉包;下部講進階模式(Advanced Patterns),如何?靜態方法和屬性,常量還有其他一些知識點。 封裝是物件導向語言很基本也是很有用的特性,雖然javascript也可以稱的上是物件導向語言,但他對封裝的支援並不是很好,不像其他語言,只要使用private、protected就可以實現。但這並不是說就沒有辦法了,下面我就介紹下如何在javascript中實現封裝。
Time of Update: 2017-01-19
在Javascript裡,setTimeout和setInterval接收第一個參數是一個字串或者一個函數,當在一個對象裡面用setTimeout延時調用該對象的方法時 複製代碼 代碼如下: function obj() { this.fn = function() { alert("ok"); console.log(this); setTimeout(this.fn, 1000);//直接使用this引用當前對象 } } var o = new obj(); o.fn();
Time of Update: 2017-01-19
具體題目是這樣的: 從1--9中選取N個數字,組成不重複的N位元,從小到大進行編號,當輸入其中任何一個數M時,能找出該數字對應 的編號。如 N=3,M=213. 輸出:[123(1) , 132(2) , 213(3) , 231(4) , 312(5) , 321(6)]--->X=2