在電腦科學發展的歷程中可以看到無論是工具還是模式的進步革新都不是無的放矢的,乙個概念的提出絕不僅僅是定義乙個名詞那麼簡單,其必然是為了滿足某種需求或者解決某類問題。現在無比繁榮的電腦科學也是在一次次的遇見問題,發現問題,解決問題,遇到新的問題的迴圈中發展起來的。
而這種認知對我們學習這門技術科學也是有好處的,在歷史上一些問題已經得到了解決,而些聚集了無數智慧型的解決方式也成為了經典。可能那些之前困擾著世界上最聰明的那部分人的問題在現在已經不是問題,甚至都不會引起你我的察覺。現在我們雖不必在糾結該去如何解決,而是仍可以從這些經典的案列,從那些為解決問題而生的工具,包,模式,架構出發,去思考其中的所蘊含的創造性思考方式,嚴謹自洽的邏輯鏈。這可能比**,比工具本身更重要。
下面就通過」原型「這個概念,來看一下解決問題是怎麼驅動模式進步的。
問題1:用object建構函式和物件字面量構造多個物件時效率太低,會造成**重複。
解決方法:工廠模式
用函式來封裝以特定的介面建立物件的細節
function createperson(name,age,job)
問題2:工廠模式還是沒有代替類的功能,沒法解決物件識別的問題
解決方式:參考原生建構函式object(),array(),可以自定義建構函式,從而自定義物件型別的屬性和方法。
function person(引數1,引數2,引數3)
使用時按照建構函式的使用方法,利用new關鍵字建構函式建構函式與工廠函式的區別在於,工廠函式本身就具有定義物件的功能,而在使用建構函式時完成物件定義的是new關鍵字。建構函式只是定義物件型別的方法和屬性所以如果沒有關鍵字 var person1=person(引數1,引數2,引數3)是無法完成定義物件的任務的。反而因為這個函式沒有返回值,person1的值只能是undefined。
問題3:在應用建構函式,每定義乙個物件,都會定義該物件的方法,每一次定義方法都會生成
乙個新的的函式,也就是會建立很多個功能相同且只能對同類物件進行操作的函式,這是很浪費資源的。
解決方法:可以在建構函式外部建立乙個有相應功能的函式,然後作為屬性值在建立建構函式時賦於某個屬性,生成方法。這樣可以就某乙個功能值建立乙個函式,供某「類」物件呼叫。
問題4:在全域性中定義很多函式,只供特定「類」物件使用,會造成命名汙染。同時也不利於該型別「類」物件的封裝性。
解決方法:在函式中都有乙個prototype屬性,這個屬性是乙個指標,對應著乙個原型物件。把乙個」類「公用的屬性和方法發在這個物件中,被該函式作為建構函式所建立的物件中,都會有乙個屬性prototype,這個屬性也是個指標,與函式中prototype屬性所對應的物件一致。這個物件即是該某一」類「物件的原型物件。
例:
functionfun()
}
為了方便理解我們可以把這個例子中的物件稱為obj原型,把用fun作為建構函式建立的物件稱為fun例項。在這個例子中函式fun可以用fun.prototype把公用的屬性和方法儲存在obj原型裡,而所有的fun例項都可以通過fun例項.proto來訪問obj原型,訪問其中的屬性和方法。 讀《電腦科學概論》產生的問題
第一章 全景圖 1.真空管和電晶體儲存資訊的原理是什麼,能儲存多少資訊?2.什麼叫嵌入式系統,還有什麼其他的系統。3.圖靈定律是什麼,為什麼有些問題是不能解決的。第二章 二進位制數值與計數系統 1.關係可以被表示為二進位制嗎?2.熟練掌握各種進製數之間的轉換。第三章 資料表示法 1.和它底層的網路為...
解決計算機不能被遠端的問題
首先,確定你的ip位址是否正確,其次,在被遠端的機器上開啟遠端 開始選單 右鍵點選 計算機 屬性 遠端設定 允許執行任意版本遠端桌面的計算機連線 較不安全 再次,檢查遠端服務是否開啟 xp 開始 執行 services.msc 開啟romote desktop help session manage...
值得一看的網路課程推薦 不限於電腦科學
前言 蒐羅來一些不錯的網路課程,比如coursera,edx,udacity上 演算法類首推coursera上普林斯頓大學的robert sedgewick,能把複雜的演算法 典型例子 紅黑樹,kmp演算法 講解清楚,缺點是沒有動態規劃,然後後面史丹福大學的演算法課程裡面有。algorithms,p...