Time of Update: 2017-01-19
介紹與建立型模式類似,原廠模式建立對象(視為工廠裡的產品)時無需指定建立對象的具體類。原廠模式定義一個用於建立對象的介面,這個介面由子類決定執行個體化哪一個類。該模式使一個類的執行個體化延遲到了子類。而子類可以重寫介面方法以便建立的時候指定自己的物件類型。這個模式十分有用,尤其是建立對象的流程賦值的時候,比如依賴於很多設定檔案等。並且,你會經常在程式裡看到Factory 方法,用於讓子類類定義需要建立的物件類型。本文下面這個例子中,是應用了Factory
Time of Update: 2017-01-19
介紹在軟體系統中,有時候面臨著“一個複雜物件”的建立工作,其通常由各個部分的子物件用一定的演算法構成;由於需求的變化,這個複雜物件的各個部分經常面臨著劇烈的變化,但是將它們組合在一起的演算法確相對穩定。如何應對這種變化?如何提供一種“封裝機制”來隔離出“複雜物件的各個部分”的變化,從而保持系統中的“穩定構建演算法”不隨著需求改變而改變?這就是要說的建造者模式。建造者模式可以將一個複雜物件的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。也就是說如果我們用了建造者模式,那麼使用者就需要指
Time of Update: 2017-01-19
我們在做互連網網站時,註冊設定檔時,經常要用到社會安全號碼,我們需要對身份證進驗證,不然別人隨便輸個號碼就通過,讓你感覺這個網站做得很shit。社會安全號碼是有規則的。結構和形式 1.號碼的結構 公民身份號碼是特徵組合碼,由十七位元字本體碼和一位校正碼組成。排列順序從左至右依次為:六位元字地址碼,八位元字出生日期碼,三位元字順序碼和一位元字校正碼。 2.地址碼 表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼,按GB/T2260的規定執行。 3.出生日期碼
Time of Update: 2017-01-19
介紹建構函式大家都很熟悉了,不過如果你是新手,還是有必要來瞭解一下什麼叫建構函式的。建構函式用於建立特定類型的對象——不僅聲明了使用的對象,建構函式還可以接受參數以便第一次建立對象的時候設定對象的成員值。你可以自訂自己的建構函式,然後在裡面聲明自訂類型對象的屬性或方法。基本用法在JavaScript裡,建構函式通常是認為用來實現執行個體的,JavaScript沒有類的概念,但是有特殊的建構函式。通過new關鍵字來調用定義的否早函數,你可以告訴JavaScript你要建立一個新對象並且新對象的成員
Time of Update: 2017-01-19
介紹觀察者模式又叫發布訂閱模式(Publish/Subscribe),它定義了一種一對多的關係,讓多個觀察者對象同時監聽某一個主題對象,這個主題對象的狀態發生變化時就會通知所有的觀察者對象,使得它們能夠自動更新自己。使用觀察者模式的好處:1.支援簡單的廣播通訊,自動通知所有已經訂閱過的對象。2.頁面載入後目標對象很容易與觀察者存在一種動態關聯,增加了靈活性。3.目標對象與觀察者之間的抽象耦合關係能夠單獨擴充以及重用。本文(版本一)JS裡對觀察者模式的實現是通過回調來實現的,我們來先定義一個pub
Time of Update: 2017-01-19
網頁開發時,在很多時候我們需要操作相同類名的元素,即class相同的元素。昨天參加筆試,有一道相關的題目沒答上來:JavaScript擷取頁面中class為test的節點於是收集了一些相關的資料,在本文中列舉了兩種我覺得比較好的方法,不足之處,還望大家批評指正。如果大家有更好的方法,希望可以分享。Solution1 Jeremy Keuth方案Jeremy Keuth大叔在《JavaScript DOM 編程藝術》(第2版)(英文:DOM Scripting-Web Design with
Time of Update: 2017-01-19
這是一則定時顯示廣告的javascript代碼,當然也可以定時顯示某一區塊內容,很實用。代碼如下:複製代碼 代碼如下:function strToDate(str, ext) { if (str == null || str == '') return; var arys = new Array(); arys = str.split('-'); var newDate = new Date(arys[0], arys[1] - 1, arys[2], 9
Time of Update: 2017-01-19
說到Javascript的類繼承,就必然離不開原型鏈,但只通過原型鏈實現的繼承有著不少缺陷。無參數類繼承的問題先看一段範例程式碼,實現B繼承於A:複製代碼 代碼如下:function A() {}A.prototype.a1 = function() { };function B() {}B.prototype = new A();B.prototype.b1 = function() { };var b = new B();alert(b.constructor == A); //
Time of Update: 2017-01-19
一談到路徑相關的問題,大家都會往window.location上想,確實這個對象提供了相當多的路徑資訊,其中常用的就包括:1.location.href:當前頁面的完整URL2.location.pathname:當前URL中的路徑名3.location.hash:當前URL中的錨點4.location.search:當前URL中的查詢參數然而,location沒有一個屬效能直接獲得目前的目錄(不含檔案名稱)的絕對路徑。通過Google我發現了一些錯誤的方法,比如說把URL通過“/”分離成數組,
Time of Update: 2017-01-19
我們平時在做項目的時候,經常會遇到需要實現實現checkBox的全選,反選與賦值的情況,網上也有許多的範例,這裡給大家分享的是本人常用的方法,推薦給大家。複製代碼 代碼如下://js 數值是否在數組中Array.prototype.in_array = function(e){ for(i=0;i<this.length;i++){ if(this[i] == e) return true; } return
Time of Update: 2017-01-19
本文執行個體講述了JavaScript實現SHA-1密碼編譯演算法的方法。分享給大家供大家參考。具體實現方法如下:調用方法:hex_sha1即可。複製代碼 代碼如下:/* * * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined * in FIPS PUB 180-1 * * By lizq * *
Time of Update: 2017-01-19
本文執行個體講述了JavaScript前補零操作的方法。分享給大家供大家參考。具體如下:很多時候為了顯示格式,需要在某一字串不滿位的情況下進行前補0操作。1. 傳統代碼/** * 前補0操作 * @param number String 待操作字串 * @param length int 目標長度 */function addZero(number, length) { var buffer = ""; if (number == "") { for (var i = 0; i
Time of Update: 2017-01-19
本文執行個體講述了JavaScript限定圖片顯示大小的方法。分享給大家供大家參考。具體實現方法如下:/** * 限制圖片顯示的size. * * @param thisobj 圖片組件 * @param limitW 限制寬度大小 * @param limitH 限制高度大小 */function imageResize(thisobj, limitW, limitH) { var newW; var newH; if (thisobj.width > limitW) {
Time of Update: 2017-01-19
之前學習了下html5中的canvas元素,為了練練手就實現了一個簡易的時鐘。時鐘本身並不複雜,也沒有使用圖片進行美化,不過麻雀雖小五髒俱全,下面就與大家分享一下:示範效果:html代碼:複製代碼 代碼如下:<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> &
Time of Update: 2017-01-19
當Html5,css3已漸漸成為主流的時候,我還非常習慣的用js去做一些簡單的動畫。因為在案頭瀏覽器上, 並非所有的都支援css3。使用者也倒是很奇怪,使用者習慣並不是每個使用者都可以被培養。總有不少人會覺得win7.win8沒xp好用。但手機方面就大不一樣了,手機瀏覽器對html5和css3的支援還是很不錯的。但手機硬體處理能力卻又十分有限。在四核、八核手機橫行的今天,依然有像我這樣使用雙核或單核手機的。js雖好,單奈何接觸不多,調不好那種感覺。一個簡單的頁面滑動,在i7的pc上運行十分流暢,
Time of Update: 2017-01-19
最近在網上有看到使用js來實現數位千位分隔字元的面試(筆試)題,所以就自己寫了一個利用“正則+replace”來實現的方法: 複製代碼 代碼如下: var thousandBitSeparator = function(numStr){ var b = /([-+]?\d{3})(?=\d)/g; return numStr.replace(b,
Time of Update: 2017-01-19
css3 的時代,css3--動畫 一切皆有可能;傳統的js 可以通過回呼函數判斷動畫是否結束;即使是採用CSS技術產生動畫效果,JavaScript仍然能捕獲動畫或變換的結束事件;transitionend事件和animationend事件標準的瀏覽器事件,但在WebKit瀏覽器裡你仍然需要使用webkit首碼,所以,我們不得不根據各種瀏覽器分別檢測事件複製代碼 代碼如下:var transitions = {
Time of Update: 2017-01-19
有個js對象數組 var ary=[{id:1,name:"b"},{id:2,name:"b"}] 需求是根據name 或者 id的值來排序,這裡有個風騷的函數函數定義:複製代碼 代碼如下:function keysrt(key,desc) { return function(a,b){ return desc ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);
Time of Update: 2017-01-19
通過數組,拓展字串拼接容易導致效能的問題複製代碼 代碼如下:function StringBuffer() { this.__strings__ = new Array();}StringBuffer.prototype.append = function (str) { this.__strings__.push(str); return
Time of Update: 2017-01-19
把JavaScript中的偽數群組轉換為真數組在 JavaScript 中, 函數中的隱藏變數 arguments 和用 getElementsByTagName 獲得的元素集合(NodeList)都不是真正的數組,不能使用 push 等方法,在有這種需要的時候只能先轉換為真正的數組。對於 arguments,可以使用 Array.prototype.slice.call(arguments); 來達到轉換的目的,但對於 NodeList 則不行了,其在 IE8 及以下將會報錯,只能說其 JS