javascript架構之全域變數

縱觀各大類庫的實現,一開始基本都是定義一個全域變數,然後對它進行擴充。如Prototype.js的Prototype,mootools的Native,Base2的Base,Ext的Ext,jQuery的jQuery,YUI的YUI,dojo的dojo,MochiKit的MochiKit等等。從全域變數的汙染程度來看,分為兩大類,Prototype,mootools與Base2歸一類。Prototype的哲學是對JS原生對象進行擴充。早些年,Ptototype差點成為事實的標準,因此基本沒有考慮到

javascript Number對象

文章目錄 Number 對象的方法Number 對象的屬性 Javascript只有一個單一的數字類型,它在內部被表示為64位的浮點數,和Java的double一樣。不像大多數其他的程式設計語言,它沒有分離出整數類型,所以1與1.0是相同的值。這提供了很大的方便,因為它完全避免了短整數的溢出問題,你只要知道的一切就是它是一種數字。這樣就避免了一大堆因數字類型而導致的錯誤。Number 對象的方法FF: Firefox, IE:

javascript 選取器簡明教程

文章目錄 兄長選擇符相鄰選擇符親子選擇符 本來準備開講jQuery源碼學習筆記六的,但心中有佛才能看到佛,有些人連選取器都不知什麼東西,直接講下去,估計有人會看得雲裡霧裡,滿頭霧水了。加之,John

javascript擷取隨機顏色

在製作餅圖或標籤雲時,我們通常需要很多顏色,方法有二。一是準備一組漂亮的候選顏色,二是隨機產生顏色。在數量很多或不明確時,我想後者就是唯一的出路了。Google了一下,整理如下,按由淺入深的順序排列。實現1 var getRandomColor = function(){ return '#' + (function(color){ return (color += '0123456789abcdef'[Math.floor(Math.random()*16)])

javascript線性漸層1

javascript在處理映像的能力其實是不弱的,可惜瀏覽器大戰連累了它,這還不算,Adobe 收購Macromedia更讓SVG處於怠工狀態。作為新力軍,蘋果為我們帶來了canvas標籤。canvas首次在Mac OS

javascript替換字元

不用多言,這種技術被廣泛應用於表單驗證,文法高亮和危險字元過濾中。一段話如果很長,如果不想像下面那樣替換,我們得想些辦法了。str = str.replace( /&(?!#?\w+;)/g , '&amp;').replace( /"([^"]*)"/g , '“$1”' ).replace( /</g , '&lt;' ).replace( />/g , '&gt;' ).replace(

javascript contains方法

IE有許多好用的方法,後來都被其他瀏覽器抄襲了,比如這個contains方法。如果A元素包含B元素,則返回true,否則false。唯一不支援這個方法的是IE的死對頭firefox。<!doctype html><title>dom contains 方法 by 司徒正美</title><meta charset="utf-8"/><meta name="keywords" content="dom contains 方法 by 司徒正美"

javascript十進位轉二進位,二進位轉十進位

alert(parseInt("101101", 2))運行代碼 function toBin(intNum) { var answer = ""; if(/\d+/.test(intNum)) { while(intNum != 0) { answer = Math.abs(intNum%2)+answer; intNum = parseInt(intNum/2);

javascript測試函數運行速度

通常我們需要對函數進行最佳化,一般的做法是開始的時候獲得時間,結束的時候再獲得一次時間,兩次時間相減就能到到花費的時間。而函數運行速度之快,基本上都是毫秒級的。下面給出的函數就是就此準備的。 // 時間轉為時間戳記(毫秒)function time2stamp(){ var d = new Date(); return Date.parse(d)+d.getMilliseconds();}用法: var t1 = time2stamp(); //

javascript命名空間的簡單實現

為了防止與其他類庫發生命名衝突,命名空間是必需的。下面是一個簡單的實現。<script> (function(){ if(!window.JS){ window['JS'] = {} } var $ = function(id) { return document.getElementById(id); } var html = function (id) { if(!(obj = $(id))) return

JavaScript trim函數大賞

W3C那幫人的腦袋被驢踢了,直到javascript1.8.1才支援trim函數(與trimLeft,trimRight),可惜現在只有firefox3.5支援。由於去除字串兩邊的空白實在太常用,各大類庫都有它的影子。加之,外國人都很有研究精神,搞鼓了相當多實現。實現1 String.prototype.trim = function() { return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');

javascript 的forEach函數

在Base2中找到一個叫forEach的函數,是我見過的最好的實現。挖出來分析一下。它能對各種普通對象,字串,數組以及類數組進行遍曆。如果原遊覽器的對象已實現此函數,它則調用原對象的函數。 function forEach(object, block, context, fn) { if (object == null) return; if (!fn) { if (typeof object == "function" &&

javascript的動態this與動態綁定

javascript是一門動態語言,最明顯就是那個dynamic this。它一般都是作為函數調用者存在。在javascript,所有關係都可以作為對象的一個關聯陣列元素而存在。那麼函數就是被掰成兩部分儲存於對象,一是其函數名(鍵),一是函數體(值),那麼函數中的this一般都指向函數所在的對象。但這是一般而已,在全域調用函數時,我們並沒有看到調用者,或者這時就是window。不過,函式宣告後,其實並沒有綁定到任何對象,因此我們可以用call apply這些方法設定調用者。一個簡單的例子:

javascript wrapper函數

在設計javascript的繼承體系時,有一個重要需求,方法鏈。通俗地說,說是在方法中調用父類的同名方法。類似java的this.super().method()。如何把父類的同名方法封裝到子類中呢?這就要用到wrapper函數。之所以叫wrapper,而不是wrap,因為它比wrap更加wrapper。比如像Ext那種深度繼承的結構中,如果父類沒有找祖父,祖父沒有找曾祖父,沿著原型鏈層層上溯,以擷取它所需要的功能。此外,wrapper函數在jQuery也有應用,好像分為三種wrapAll,wr

javascript架構之繼承機制

大一點的架構都有這個東西。Prototype原來的繼承機制非常弱,為了與mootools對抗也強化了這一方面。嘛,要用原型繼承來模仿類繼承,都基本存在一個複製函數。把父類的原型屬性複製到子類上去。理念的東西暫時這麼多,動手實踐一下最實際。我們設計一個數組類,擁有原生數組的能力與新擴充的能力。 var isNumber = function(n){ return typeof n === 'number' && isFinite(n);

javascript架構之繼承機制2

我們來模仿一下最OO的mootools的繼承機制。它的類都有一個叫做initialize構造方法,這與Java的類都有一個與類名同名的構造方法一樣的道理。只不過,這些叫initialize或init都是借鑒自Prototype,而Prototype那幫人是Ruby出身。為了區別mootools那種汙染原生方法的做法,我把類的構造器命名為variant,並且禁止查看構造方法(像瀏覽器禁止查看原生對象的構造方法那樣)。 var variant = function (options){

javascript RegExp對象

JavaScript提供了一個RegExp對象來完成有關Regex的操作和功能,每一條Regex模式對應一個RegExp執行個體。有兩種方式可以建立RegExp對象的執行個體。使用RegExp的顯式建構函式,文法為:new

javascript Array擴充

最近看了一下developer.mozilla.org裡的東西,發現它為Array對象添加了不少generic method,趕得上Prototype的熱心程度。indexOf返回元素在數組的索引,沒有則返回-1。與string的indexOf方法差不多。如果其他瀏覽器沒有實現此方法,可以用以下代碼實現相容://09,12,11新修正 Array.prototype.indexOf=function(item, index) { var n =

javascript無縫滾動2

以更少的代碼實現相同的效果應該是我們寫程式的究極目標,當然可讀性不能丟。在第一部分最後一個運行框,我已經做了這樣的探索。不過換湯不換藥,還是來來回回在scrollTop/scrollLeft與offsetTop/offsetLeft上做文章。總的思路基本是這樣,讓某個元素整體向某個方向移動,這樣它裡面的內容(圖片或文字)就跟著移動,當元素移動到某一個距離後就回到原點。為了防止內容移著移著就沒有了,我們需要兩套相同的內容。在第一部分,第二套內容是動態產生的,並複製到另一個兄弟元素中,這在水平滾動時

javascript 特徵偵測技術

這種新式的技術最先由jQuery搞出來的,接著Prototype與mootools都支援了。這技術興起的原因是瀏覽器嗅探技術是不太可靠,如UserAgent很容易被偽造,如IE8的UserAgent就把許多瀏覽器的關鍵字包含進去,造成辯識困難。其他一些重要辯識手段,由於瀏覽器廠商對舊版本的升級與不斷推進新版本,許多都無效了。由於瀏覽器種類越來越多,版本也越來越多,看看Ext的核心檔案吧,真是有耐性,連Firefox與蘋果的各個版本都列出來,這東西會沒有止境地膨脹,為此特徵偵測技術應運而生。這東西

總頁數: 3271 1 .... 351 352 353 354 355 .... 3271 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.