Time of Update: 2018-12-08
1:修改迴圈的執行方式 for(var i=0;i<element.childNodes.length;i++){ 執行代碼 } 這種方式每次迴圈都要取element.childNodes.length的值,應該改為如下的 var n=element.childNodes.length for(var i=0;i<n;i++){ 執行代碼 } 2:修改dom操作的次數 dom批量插入一批類似的節點不如先構造一個對象,插入一次 比如下面這種方法就是合理的: var
Time of Update: 2018-12-08
RegExp類 RegExp對象的建構函式可以帶一個或兩個參數 第一個參數是描述需要進行匹配的模式字串,如果還有第二個參數,這個參數則制定了額外的處理指示。 一、基礎 1.1使用RegExp對象 test()方法 測試是否匹配。如果給定字串(只有一個參數)匹配這個模式,它就返回true,否則返回false 複製代碼 代碼如下:var sToMatch = "cat"; var reCat = /cat/; //Regex字面量使用Perl風格的文法
Time of Update: 2018-12-08
但是parseInt("08", 10)是可以返回8的。 為搞清楚兩者的區別, 參考了別人寫的parseInt&Number的區別: parseInt Parses a string argument and returns an integer of the specified radix or base. 核心函數 實現版本 Navigator 2.0: If the first character of the string specified in
Time of Update: 2018-12-08
使用樣本: 複製代碼 代碼如下:var qs = new QueryString(query); qs.set("ajaxids", ids) qs.set("ajaxsn", new Date()) query = qs.toStr(); 也可以連續調用: 複製代碼 代碼如下:query = new QueryString(query).set("ajaxids", ids).set("ajaxsn", new Date()).toStr(); 其它用法就自己看代碼琢磨吧。 完整代碼:
Time of Update: 2018-12-08
首先我們繼續上文的代碼,我們來把這段代碼延伸一下: 複製代碼 代碼如下:<script type="text/javascript"> var Person = function (name, age) { this.name = name; this.age = age; this.Introduce = function () { alert("My name is " + this.name + ".I'm " + this.age); }; }; var person1 =
Time of Update: 2018-12-08
offsetTop 可以獲得 HTML 元素距離上方或外層元素的位置,style.top 也是可以的,二者的區別是: 一、offsetTop 返回的是數字,而 style.top 返回的是字串,除了數字外還帶有單位:px。 二、offsetTop 唯讀,而 style.top 可讀寫。 三、如果沒有給 HTML 元素指定過 top 樣式,則 style.top 返回的是Null 字元串。 offsetLeft 與 style.left、offsetWidth 與
Time of Update: 2018-12-08
我們先看看這樣一段代碼: 複製代碼 代碼如下:<script type="text/javascript"> var Person = function () { }; var p = new Person(); </script> 很簡單的一段代碼,我們來看看這個new究竟做了什嗎?我們可以把new的過程拆分成以下三步: <1> var p={}; 也就是說,初始化一個對象p。 <2> p.__proto__=Person.prototype;
Time of Update: 2018-12-08
先看一下官方的解釋: call 方法 請參閱 應用於:Function 對象 要求 版本 5.5 調用一個對象的一個方法,以另一個對象替換當前對象。 call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 參數 thisObj 可選項。將被用作當前對象的對象。 arg1, arg2, , argN 可選項。將被傳遞方法參數序列。 說明 call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的物件內容從初始的上下文改變為由 thisObj
Time of Update: 2018-12-08
有時候可能會有這麼一個需求,我在後台使用: 複製代碼 代碼如下:HttpUtility.UrlEncode(str, System.Text.Encoding.UTF8); 將Url進行編碼,前台JS需要使用這段內容,這時候就需要解碼了: 代碼 複製代碼 代碼如下:/** * Url編碼 **/ ShengUtils.encode = function(unzipStr){ var zipstr=""; var strSpecial="!\"#$%&'()*+,/:;<=>?
Time of Update: 2018-12-08
以前這些東西自己清楚,可是卻解釋不出來,也沒有去深究這些東西。今天在看《悟透JavaScript》的時候,看到作者的描述,“茅廁”頓開。 現摘錄如下,作者說的很是清楚: 用 var anObject = new aFunction() 形式建立對象的過程實際上可以分為三步: 第一步是建立一個新對象; 第二步將該對象內建的原型對象設定為建構函式prototype引用的那個原型對象; 第三步就是將該對象作為this參數調用建構函式,完成成員設定等初始化工作。
Time of Update: 2018-12-08
複製代碼 代碼如下://取得元素x座標 function pageX(elem) { return elem.offsetParent?(elem.offsetLeft+pageX(elem.offsetParent)):elem.offsetLeft; } //取得元素y座標 function pageY(elem) { return elem.offsetParent?(elem.offsetTop+pageY(elem.offsetParent)):elem.offsetTop; }
Time of Update: 2018-12-08
具體結論可參見《javascript下動態this與動態綁定執行個體代碼》。本文專註設計一個無侵入的綁定函數。[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]基於不擴充原生對象的原則,弄了這個bind函數(dom為範圍),用法與Prototype架構的bind差不多。 複製代碼 代碼如下:dom.bind = function(fn,context){ //第二個參數如果你喜歡的話,也可以改為thisObject,scope, //總之,是一個新的範圍對象 if
Time of Update: 2018-12-08
複製代碼 代碼如下:function forEach(object, block, context, fn) { if (object == null) return; if (!fn) { if (typeof object == "function" && object.call) { //遍曆普通對象 fn = Function; } else if (typeof object.forEach == "function" &&
Time of Update: 2018-12-08
那麼函數就是被掰成兩部分儲存於對象,一是其函數名(鍵),一是函數體(值),那麼函數中的this一般都指向函數所在的對象。但這是一般而已,在全域調用函數時,我們並沒有看到調用者,或者這時就是window。不過,函式宣告後,其實並沒有綁定到任何對象,因此我們可以用call apply這些方法設定調用者。 一個簡單的例子: [script] <script> window.name = "window"; var run = function() { alert("My name is "
Time of Update: 2018-12-08
看代碼,不說話: 複製代碼 代碼如下:var i=arr.length; while(i--) { //寫點啥? } 上面是Google array.js 程式中建議改進的代碼。思考為什麼i-- 到了 i為0時while迴圈結束了?下面的代碼與它等價: 複製代碼 代碼如下:var i=arr.length; for(;i--;) { //i--寫在兩個分號的中間,奇怪嗎?不奇怪嗎? } 震撼?沒感覺?
Time of Update: 2018-12-08
javascript中的對象還沒解釋清楚怎麼回事,一上來就直奔主題,類/繼承/原型/私人變數.... 結果呢,看了大半天,有了一個大概的瞭解,細細一回味,好像什麼都沒懂... 這篇文章是參考<<javascript-the definitive guide,5th edition>>第7,8,9章而寫成的,我也
Time of Update: 2018-12-08
複製代碼 代碼如下:function keyPress(ev){ if(ev.keyCode==13){ //在游標所在處建立一個地區. var range=document.selection.createRange(); //將地區的內容設定成為分行符號. range.text="\n"; //將地區的起始點向右移動一個字元的長度. range.moveStart("character", 1); //將游標移動到地區的結尾.(若為false則是移動到起始位置).
Time of Update: 2018-12-08
字串的串連 一、 最常用+= 一直說這種方式的效率是最低的,為什麼呢?可以看下這種方式的實質過程。 var str = "hello"; str += "world"; (1) 建立儲存"hello"的字串。 (2) 建立儲存"world"的字串。 (3) 建立儲存串連結果的字串。 (4) 把str的當前內容複寫到結果中。 (5) 把"world"複製到結果中。 (6) 更新str,使它指向結果。 每次完成字串串連都會執行步驟2到6,使得這種操作非常消耗資源。如果重複這一過程幾百次,甚至幾千次,
Time of Update: 2018-12-08
一、 工廠方式 自己的理解:要建立很多個對象的執行個體,這些執行個體有相同的屬性,但是有不同的屬性值。這個時候就需要創個工廠函數(factory function)。 工廠函數(factory function):建立並返回特定類型的對象。 工廠函數中如果一個屬性是方法的話,可以在工廠函數的外面定義對象的方法,然後通過屬性指向該方法,從而可以避開每次都調用自己的屬性方法,這樣做使得每個對象都共用了同一個函數。 樣本: 複製代碼 代碼如下:<script
Time of Update: 2018-12-08
本機物件 ①Array類 ②Date類 對象的類型 內建對象 ①Global對象 ②Math對象 宿主對象 今天繼續學習JS中的對象,昨天內建對象Global對象和Math對象,今天繼續。宿主對象 所有非本機物件都是宿主對象host object,即由ECMAScript實現的宿主環境提供的對象。所有BOM和DOM對象都是宿主對象,書上說將在後面的章節討論。-_-||| 範圍