【读书笔记】《Javascript语言精粹》
為什么80%的碼農都做不了架構師?>>> ??
第二章 語法
通過檢測 object.hasOwnProperty(variable)來確定屬性名就是改對象的成員,還是從其原型鏈里找到的。
for?(myvar?in?obj){if?(obj.hasOwnProperty(myvar)){...} }第三章 對象
對象屬性值初始化和檢索
檢索一個并不存在的成員元素的值,將返回一個undefined
可以使用 || 運算符填充默認值,如 var middle = stooge[“middle-name”] || “(none)”;
可以用 && 運算符來避免檢索一個undefined值導致的TypeError異常,如 flight.equipment && flight.equipment.model
對象通過引用來傳遞,永遠不會被拷貝:
使用原對象作為其原型的新對象
原型連接在更新時是不起作用的。當我們對某個對象作出改變時,不會觸及到該對象的原型。
委托
原型連接只有在檢索值的時候才被用到。如果我們嘗試去獲取對象的某個屬性值,且該對象沒有次屬性命,那么Javascript會試著從原型對象中獲取屬性值。如果那個原型對象也沒有該屬性,那么再從它的原型中尋找,一次類推,直到該多承最后到達終點Object.prototype。如果想要的屬性完全不存在于原型鏈中,那么結果就是undefined值。
枚舉?
for?(name?in?another_stooge){...... }刪除對象的屬性?
another_stooge.nickname;??????????//"moe" delete?another_stooge.nickname; //刪除another_stooge的nickname屬性,從而暴露出原型的nickname屬性 another_stooge.nickname;??????????//"curly"?(原型的該屬性值)減少全局變量污染:可以創建唯一一個全局變量,var MYAPP = {};將該變量作為容器,往其中添加屬性值。
第四章 函數
調用
在Javascript 中一共有四種調用模式:方法調用模式、函數調用模式、構造器調用模式、apply調用模式。
每個函數在接收參數時,會接受兩個附加的參數:this 和 arguments 。this 取決于上述不同的調用模式。
方法調用模式
當一個函數被保存為對象的一個屬性時,成為方法。當一個方法被調用時,this被綁定倒該對象。如果一個調用表達式包含一個屬性存取表達式,那么它被當作一個方法來調用。
方法可以使用this去訪問對象,所以它能從對象中取值或修改該對象。this 倒對象的綁定發生在調用的時候。這個 超級 遲綁定(very late binding)使得函數可以對this 高度復用。通過this可取得它們所屬對象的上下文的方法成為 [公共方法]。
函數調用模式
當一個函數并非一個對象的屬性時,那么它被當作一個函數來調用:var sum = add(3,4); //sum 值為7
當函數以此模式調用時,this被綁定到全局對象。因此,內部函數的this時無法共享該方法對對象的訪問權。解決方案:如果該方法定義一個變量并給它賦值為this,那么內部函數就可也i通過那個變量訪問到this。如下所示:
構造器調用模式
Javascript是基于原型繼承的語言。對象可以直接從其他對象繼承屬性。
如果在一個函數前面帶上new 來調用,那么將創建一個隱藏連接到該函數的 prototype 成員的新對象,同時this 將會被綁定到那個新對象上。new 前綴也會改變return 語句的行為。
//創建一個名為Quo?的構造器函數。它構造一個帶有?status?屬性的對象。 var?Quo?=?function?(string)?{this.status?=?string; }; //給Quo?的所有實例提供一個名為get_status?的公共方法。 Quo.prototype.get_status?=?function?()?{return?this.status; } //構造一個?Quo?實例 var?myQuo?=?new?Quo("confused"); document.writeIn(myQuo.get_status());其目的就是結合new前綴調用的函數,被成為構造器函數。必須以首字母大寫格式來命名構造器函數,調用構造器函數時必須在前面加上new 。
Apply調用模式?
apply 方法讓我們構建一個參數數組并用其去調用函數。它允許我們選擇this 的值。apply 方法接收兩個參數。第一個是將被綁定給this 的值。第二個就是一個參數數組。
參數
當函數被調用時,會得到一個參數數組 arguments。通過它,函數可以訪問所有它被調用時傳遞給它的參數列表,包括那些沒有分配給函數聲明時定義的形式參數的多余參數。但這個數組,只有一個length屬性,它缺少所有的數組的方法。
返回
如果沒有返回值,則返回 undefined 。如果函數以在前面加上new 前綴的方式來調用,且返回值不是一個對象,則返回 this (該新對象)。
異常throw、try、catch:
try語句執行一個代碼塊,并捕獲改代碼快拋出的任何一場。catch從句定義了一個新的變量,它將接受該異常對象。
throw 語句拋出一個異常。如果throw語句在一個try代碼塊重,那么控制權會跳到catch從句中。如果throw語句在函數中,則該函數調用被放棄,且控制權會跳到調用該函數的try語句的catch從句中。
var?add?=?function?(a,b){if?(typeof?a?!==?'number'?||?typeof?b?!==?'number'){throw?{"name"?:?"TypeError","message"?:?"add?needs?numbers" }; }return?a?+?b; } var?try_it?=?function?(){try?{add("seven"); } catch?(e){alert(e.name?+?"?:?"?+?e.message); } } try_it();給類型增加方法
Function.prototype.method?=?function(name,func){this.prototype[name]?=?func;return?this; };函數遞歸調用方法,實例:漢諾塔
回調
//樸素寫法request?=?prepare_the_request();response?=?send_request_synchronously(request);display(response);//回調寫法request?=?prepare_the_request();send_request_synchronously(request,function?(response){display(response);});函數模塊
函數套用
函數記憶
for?(var?i?=?0;?i?<=?10;i?++){alert("?i?(?"?+?i?"?)?:?"?+?fibonacci(i)); }//普通寫法,被調用29次,自己調用了11次,它自身調用了18次var?fibonacci?=?function(){var?memo?=?[0,1];var?fib?=??function?(n){if?(typeof?result?!==?"number"){result?=?fundamental(shell,n);memo[n]?=?result; }return?result; } return?fib; }//回調寫法var?memoizer?=?function?(memon,fundamental){var?shell?=?function?(n){var?result?=?memo?[n];if?(typeof?result?!==?"number"){result?=?fundamental(shell,n);memo[n]?=?result; }return?result;}; return?shell; }var?fibonacci?=?memoizer([0,1],function(shell,n){return?shell(n-1)?+?shell(n-2); });第五章 繼承?
偽類
第六章 數組?
數組:Javascript 提供了一種擁有類數組(array-like)特性的對象。它把數組的下表編程字符串,用其作為屬性。明顯地比一個真正的數組慢但它可以更方便地使用。屬性的檢索和更新的方式與對象幾乎一樣,除了有一個可以用整數作為屬性名的特性外。
基本操作:
var?numbers1?=?[]; var?numbers2?=?["a","b","c","d"]; var?numbers3?=?[4,5,78748,6456,"dafd"];numbers3.length;numbers3.length?=?50;???//?直接通過修改數組長度,重新給數組分配空間numbers1.push("go");????//?向數組末位添加一個元素delete?numbers2[2;];??//?這樣刪除之后,被刪元素后面的數組元素不會改變下標,會在數組中遺留一個空洞numbers2.splice(2,1); //?從數組中下標為2的元素開始,刪除?1?個元素。對于大型數組,效率不高。?第七章 正則表達式?
正則表達式是一門簡單語言的語法規范。以方法的形式被用于對字符串中的信息進行查找、替換和提取操作。常用的方法有:regexp.exec、regexp.test 、string.match 、string.replace 、string.search 、string.split。
?
?
轉載于:https://my.oschina.net/maomi/blog/79108
總結
以上是生活随笔為你收集整理的【读书笔记】《Javascript语言精粹》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络技术 几项技术!
- 下一篇: 使用Oracle SQL Develop