Javascript模式阅读笔记 · 简介
JavaScript是一門基于Web的語言。它最初是作為在網頁中操作一些特定類型元素(例如圖像和表格字段)的方法,現在該語言的發展已經遠遠超出了預期。除了作為客戶端瀏覽器所使用的腳本,現在JavaScript還可以用于正在增加的更加多樣化的平臺編程。例如可以用于編寫服務端代碼(.net或node.js)、應用程序的擴展(Firefox和Photoshop編寫擴展)、移動應用程序和命令行腳本。
JavaScript也是一門與眾不同的語言。它沒有類,并且函數是用于很多任務的頂層類對象。最初很多程序員認為該語言效率低下,但近年來該觀念有所改變。有趣的是,例如Java和PHP這類語言開始增加閉包和匿名函數特性,而JavaScript程序員早就已經享用了這些特性。
JavaScript是一門動態性較強的語言,通過配置可以使其看上去和感覺起來像您過去習慣的其他語言一樣。但接受JavaScript與其他語言的不同,并學習其特定的模式可能是更好的方法。
?
什么是模式(Pattern)
維基百科解釋為: 在物體或事件上,產生的一種規律變化與自我重復的樣式與過程。在模式之中,某些固定的元素不斷以可預測的方式周期性重現。最基本而常見的模式,稱為密鋪,具備重復性以及周期性兩大特征。找尋出固定模式是人類基本的認知功能之一。
在軟件開發中,模式是指一個通用問題的解決方案。一個模式不僅僅是一個可以用來復制粘貼的代碼解決方案,更多地提供了一個更好的實踐經驗、有用的抽象化表示和解決一類問題的模板。
?
學習模式的理由
1. 通過學習模式,可以幫助我們使用經過實踐證明有效的經驗來編寫代碼,而無需做很多無用工作。
2. 模式提供了某種程度上的抽象。我們的大腦在一定時間內僅僅能記住一定數量的內容,因此在思考更復雜的問題時,使用模式可以讓您集中經理去用已有模式來解決該問題,而不需要被一些低層次的細節所困擾。
3. 模式可以改善開發者和開發團隊之間的交流。
?
JavaScript基本概念 · 面向對象
JavaScript是一門面向對象的語言,任何一段Javascript代碼都很有可能是一個對象。只有五中基本類型不是對象:數值類型(Number)、字符串類型(String)、布爾類型(Boolean)、空類型(null)和未定義類型(undefined)。其中前三個類型有對應的以基本類型封裝形式體現的對象表示。數值類型、字符串類型和布爾類型的值可以通過程序員或者位于幕后的JavaScript解釋器來實現向對象的轉換。
函數(Function)實際上也是對象,函數有屬性和方法。
在任何一門程序語言中最簡單的事情就是定義一個變量。在JavaScript中,一旦定義好一個變量,同時也就已經正在處理對象了。首先,該變量會自動成為內置對象的一個屬性,成為激活對象(如果該變量是一個全局變量,那該變量會成為全局對象的一個屬性)。
var a = 1; console.log(window.a); // return => 1 console.log(window["a"]); // return => 1該變量實際上也是偽類,因為它擁有其自身的屬性(attributes),該屬性決定了該變量是否可以被修改、被刪除和在一個for in循環中進行枚舉。這些屬性在EMCAScript?3中沒有直接對外提供,但在第5版本中,提供了一個特殊描述符方法來操作這些屬性。
那么對象是什么東西呢?因為他們需要做很多事情,所以這些對象必須十分特殊。實際上對象十分簡單的。一個對象僅僅是一個容器,該容器包含了命名的屬性、鍵-值對(大多數)的列表。這里面的屬性可以是函數(函數對象),這種情形下我們稱其為方法(Function)。
關于創建的對象的另外一件事情是可以在任意時間修改此對象(ECMAScript 5引入了API來防止突變)??梢詫σ粋€對象執行添加、刪除和更新它的成員變量。如果關注隱私和訪問,在模式方面也有對應的內容。
對象主要有兩種類型:
原生的(Native)、主機的(Host)
原生對象可以進一步分為內置對象(例如數組、日期對象等)和用戶自定義對象(例如 var P={x: 0, y: 5};)等。
主機對象包含windows對象和所有的DOM對象。如果還不確定使用的是否是主機對象,可以嘗試在不同的、無瀏覽器的環境下運行該代碼,如果該代碼能正確的運行,那么應該使用的是原聲的對象。
?
JavaScript基本概念 · 沒有類
在JavaScript中沒有類。不使用類的做法可以使得編程更為簡潔。在創建一個對象的時候,無需先擁有一個類。這對于其他編程語言是不同的。
對于其他編程語言,創建對象的方式(C#):
public class P{private int x;private int y;public P(int x, int y){this.x = x;this.y = y; } }P pointA = new P(1, 2);?
而JavaScript:
var pointA = { x: 1, y: 2};?
這樣在需要創建一個簡單對象的時候,往往JavaScript更為簡單,我們亦希望讓對象更為簡潔。
在JavaScript中,可以在需要的時候創建一個空對象,然后開始為該對象添加感興趣的成員變量??梢詾樵搶ο筇砑踊绢愋?、函數和其他對象來作為該對象的屬性。一個“空對象”實際上并不是完全空白的,他實際上包含了一些內置的屬性,但沒有其自身的屬性。
“盡量多使用對象的組合,而不是使用類的繼承”。這句話的意思是通過已有的對象組合來獲取新對象,是比通過很長時間的父-子繼承鏈來創建新的對象更好的一種方法。在JavaScript中可以很簡單地實踐該建議,之所以這么簡單是因為在JavaScript中沒有類,因此使用對象組合是唯一可以采取的方法。
?
JavaScript基本概念 · 原型(Prototypes)
JavaScript沒有繼承,盡管這是重用代碼的一種方式。但JavaScript可以使用多種方法實現繼承,這里通常使用原型。原型是一個對象,并且創建的每一個對象都會自動獲取一個Prototypes屬性,該屬性指向一個新的空對象。該對象幾乎等同于采用對象字面量或Object()創建的對象,區別在于它的構造器(constructor,該屬性返回對創建此對象的數組函數的引用)屬性指向了所創建的函數,而不是指向內置的Object()函數??梢詾樵摽諏ο笤黾映蓡T變量,以后其他對象也可以從該對象繼承并像使用自己的屬性一樣使用該對象的屬性。
?
var P = function (x, y) { this.x = x; this.y = y; } console.log(P.prototype); // Object {} console.log(P.constructor); // function Function() { [native code] } var p = new P(1, 2); console.log(p.constructor); // function (x, y) { this.x = x; this.y = y; } console.log(p.constructor.prototype === P.prototype); // true?
原型就是一個對象(不是一個類,也不是其他特殊的元素),每一個函數都有Prototype屬性。
?
JavaScript基本概念 · 環境
JavaScript需要運行環境來執行。通常JavaScript是在瀏覽器中執行的,但是這不是唯一的運行環境。本書中介紹的模式大部分是和核心JavaScript(ECMAScript)相關的。因此它們是與環境無關的。除了以下兩種情況以外:
1. 特定針對瀏覽器的模式。
2. 其他示范模式的實際應用程序范例。
環境會提供自身的主機對象(例如window對象),該對象在ECMAScript標準中沒有定義,可能會帶來沒有特別提到的和不確定的行為。
?
JavaScript基本概念 · EMCAScript 5
核心的JavaScript編程語言(不包含DOM、BOM和額外的主機對象)是基于EMCAScript標準(縮寫為ES)。該標準的第三版是在1999年被官方所接受,并且是當前瀏覽器所使用的標準。該標準的第四版被放棄了,第五版在2009年12月得到通過,這相比第3版過去了10年。
目前支持ECMAScript 5瀏覽器
| 瀏覽器 | IE | Firefox | Chrome | Safari | Opera | IOS Safari | Opera Mini | Android Browser | Blackberry Browser | IE Mobile |
| 版本 | 10 - 11 | 22 - 25 | 28 - 31 | 6 - 7 | 16 - 17 | 5 - 7 | 不支持 | 3.0 - 4.2 | 7 - 10 | 10 |
此表統計于2013年9月
第5版ECMAScript增加了一些新的內置對象、方法和屬性,但最重要的是增加了所謂的strict(嚴格)模式,該模式實際上可以從JavaScript語言中移除某些特性,使得程序更為簡潔和不容易出錯。例如with語句的語法在這幾年中有很多爭議。現在在ES5的strict模式中將會引發錯誤,盡管在非strict模式中能正常運行。strict模式是通過一個普通字符串來觸發的,在該語言的較早的實現方式中將會忽略掉該代碼。這意味著通過使用strict模式,可以實現向后兼容性,因為在之前不能理解該代碼的瀏覽器中,它不會引起錯誤。
在一個作用域(可以是函數作用域、全局作用域或者在將字符串的起始位置傳遞給eval()中),也可以使用如下字符串:
function My(){"use strict";//...以下放置函數的其余部分 }?
這就意味著函數中的代碼是在ECMAScript語言的strict子集中運行。對于之前的瀏覽器,這僅僅是一個字符串,并沒有分配給任何變量,因此不會被使用,進而不會導致錯誤。
在本語言的未來計劃中,將只允許使用strict模式。考慮到ES5是一個過渡版本,本語言現在鼓勵開發者使用strict模式編寫代碼,但不強制要求。
轉載于:https://www.cnblogs.com/raindream/p/3345587.html
總結
以上是生活随笔為你收集整理的Javascript模式阅读笔记 · 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库连接类:DatabaseConne
- 下一篇: 判断脚本,图片,CSS,iframe等是