Time of Update: 2018-12-08
有人說javascript也是物件導向的,只是它是prototype based,當然這隻是概念上的區別,我不想討論js是不是物件導向的,關鍵是想說明雖然javascript的類表現得很像其他語言中的類,但是內部的實現機理確不太一致,如果一味的把javascript中的類類比作其他語言中的類,有時候腦子會犯混。 先看一段簡單的代碼,一般教材上介紹如何建立一個類的時候都是這樣的(當然還有更複雜的方法,不過本質上是一樣的): 複製代碼 代碼如下:function MyClass(x) { this.
Time of Update: 2018-12-08
如果你不知道原因,不要過於擔心,請研究CSS規則並查看這篇文章:使用CSS來修正一切: 20 +常見錯誤和修複。 如果這些也無效,您可以通過下面列出的12個javascript解決方案修複它,這樣您的網頁看起來就能跨越所有瀏覽器了! 在本文中,我們會揭開你在開發web應用是可能會遇到的12個最常見的CSS問題的javascript解決方案。 1. 自動匹配高度自從我們拋棄了基於Table的頁面配置後,建立同等高度欄目或內容盒子的視覺效果已然是一個挑戰。1.1
Time of Update: 2018-12-08
1.用隱藏iframe來載入廣告頁面。 複製代碼 代碼如下:<!一開始我們就使用一個看不到的架構ID名為:framelink--> <iframe id="framelink" name="framelink" frameBorder="0" scrolling="no" width="0" height="0"></iframe> <!--建立一個帶ID為“myLink”的串連--> <a id='myLink'
Time of Update: 2018-12-08
以前這些東西自己清楚,可是卻解釋不出來,也沒有去深究這些東西。今天在看《悟透JavaScript》的時候,看到作者的描述,“茅廁”頓開。 現摘錄如下,作者說的很是清楚: 用 var anObject = new aFunction() 形式建立對象的過程實際上可以分為三步: 第一步是建立一個新對象; 第二步將該對象內建的原型對象設定為建構函式prototype引用的那個原型對象; 第三步就是將該對象作為this參數調用建構函式,完成成員設定等初始化工作。
Time of Update: 2018-12-08
一把情況下類比點擊一般兩個方面,類比點擊超級串連事件firefox的相容的函數為對HTMLAnchorElement 加入onclick事件 複製代碼 代碼如下:try { // create a element so that HTMLAnchorElement is accessible document.createElement('a'); HTMLElement.prototype.click = function () { if (typeof this.onclick ==
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中,mousedown、mouseup、click執行順序是從左至右的,更重要的是一旦mousedown事件啟用,正常情況(不在mousedown事件中綁定的方法使用alert類似方法,因為彈出對象框就阻止了事件傳遞,即後續呼叫事件丟失)下後面兩個事件也肯定會被啟用。平時我們在一個標籤上只綁定一個click事件,其實觸發click事件也都調用了mousedown、mouseup等事件,只是它們調用周期極短,而且我們又沒有編寫相關函數與這兩個事件綁定,所以不會覺察到。現在
Time of Update: 2018-12-08
比如<asp:LinkButton>控制項就被渲染成了<a>錨點控制項,這裡要講的DropDownList控制項也一樣,被渲染成了普通的select控制項,在如下的asp.net頁面中定義了一個web伺服器控制項DropDownList和一個普通的select控制項(主要為了對比)。 代碼 複製代碼 代碼如下:<asp:DropDownList ID = "ddlCities" runat = "server"> <asp:ListItem Value
Time of Update: 2018-12-08
這一段使得FireFox也支援IE的innerText方法 複製代碼 代碼如下:function isIE(){ if (window.navigator.userAgent.toLowerCase().indexOf("msie")>=1) return true; else return false; } if(!isIE()){ //firefox innerText define HTMLElement.prototype.__defineGetter__( "innerText"
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
複製代碼 代碼如下:var rgb2hex = function(rgb) { rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); return "#"+tohex(rgb[1])+tohex(rgb[2])+tohex(rgb[3]) } var tohex = function(x) { var hexDigits = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'
Time of Update: 2018-12-08
getElementsByClassName() 為了從一大堆HTML代碼中找出我們的樹狀菜單(也許有多個),我們先來實現一個通過className找DOM節點的方法:getElementsByClassName。這是對瀏覽器自有DOM方法的一個簡單但實用的擴充。 此方法有兩個參數:ele指出以哪個DOM節點為根節點尋找(也就是說只找ele的子節點),className指出合格節點的class屬性中必須包含怎樣的className。它的傳回值是一個數組,存放了所有合格節點。 複製代碼
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
今天先預覽一下今晚的成果,如下(挫了點,別扔磚頭):今天主要設計了下選取器,就是進入遊戲時展現遊戲列表,然後用來選擇遊戲的一個白癡的功能。 選取器建立在昨天的遊戲類基礎上,針對昨天的代碼我作了部分修改: 複製代碼 代碼如下://5.遊戲類:名稱,邏輯方法,鍵盤方法,開始方法,開始關卡方法,結束方法 var Game = function(name, logicalFn, keyFn, startFn, loadFn, endFn) { //遊戲名 this._name = name ||
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對象都是宿主對象,書上說將在後面的章節討論。-_-||| 範圍