日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

【读书笔记】《Javascript语言精粹》

發(fā)布時(shí)間:2025/3/15 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【读书笔记】《Javascript语言精粹》 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

第二章 語(yǔ)法

通過(guò)檢測(cè) object.hasOwnProperty(variable)來(lái)確定屬性名就是改對(duì)象的成員,還是從其原型鏈里找到的。

for?(myvar?in?obj){if?(obj.hasOwnProperty(myvar)){...} }

第三章 對(duì)象

對(duì)象屬性值初始化和檢索
檢索一個(gè)并不存在的成員元素的值,將返回一個(gè)undefined
可以使用 || 運(yùn)算符填充默認(rèn)值,如 var middle = stooge[“middle-name”] || “(none)”;
可以用 && 運(yùn)算符來(lái)避免檢索一個(gè)undefined值導(dǎo)致的TypeError異常,如 flight.equipment && flight.equipment.model

對(duì)象通過(guò)引用來(lái)傳遞,永遠(yuǎn)不會(huì)被拷貝:

var?x?=?stooge; x.nickname?=?'Curly'; var?nick?=?stooge.nickname; //因?yàn)閤和stooge是指向同一個(gè)對(duì)象的引用,所以?nick?為?'Curly'var?a?=?{},b?=?{},c?=?{}; //?三者都引用一個(gè)不同的空對(duì)象 a?=?b?=?c?=?{}; //三者引用同一個(gè)控對(duì)象

使用原對(duì)象作為其原型的新對(duì)象

if?(typeof?Object.beget?!==?'function')?{Object.beget?=?function?(o){var?F?=?function?(){};F.prototype?=?o;return?new?F();}; } var?another_stooge?=?Object.beget(stooge);

原型連接在更新時(shí)是不起作用的。當(dāng)我們對(duì)某個(gè)對(duì)象作出改變時(shí),不會(huì)觸及到該對(duì)象的原型。

委托
原型連接只有在檢索值的時(shí)候才被用到。如果我們嘗試去獲取對(duì)象的某個(gè)屬性值,且該對(duì)象沒有次屬性命,那么Javascript會(huì)試著從原型對(duì)象中獲取屬性值。如果那個(gè)原型對(duì)象也沒有該屬性,那么再?gòu)乃脑椭袑ふ?#xff0c;一次類推,直到該多承最后到達(dá)終點(diǎn)Object.prototype。如果想要的屬性完全不存在于原型鏈中,那么結(jié)果就是undefined值。

枚舉?

for?(name?in?another_stooge){...... }

刪除對(duì)象的屬性?

another_stooge.nickname;??????????//"moe" delete?another_stooge.nickname; //刪除another_stooge的nickname屬性,從而暴露出原型的nickname屬性 another_stooge.nickname;??????????//"curly"?(原型的該屬性值)

減少全局變量污染:可以創(chuàng)建唯一一個(gè)全局變量,var MYAPP = {};將該變量作為容器,往其中添加屬性值。

第四章 函數(shù)

調(diào)用
在Javascript 中一共有四種調(diào)用模式:方法調(diào)用模式、函數(shù)調(diào)用模式、構(gòu)造器調(diào)用模式、apply調(diào)用模式。
每個(gè)函數(shù)在接收參數(shù)時(shí),會(huì)接受兩個(gè)附加的參數(shù):this 和 arguments 。this 取決于上述不同的調(diào)用模式。

方法調(diào)用模式
當(dāng)一個(gè)函數(shù)被保存為對(duì)象的一個(gè)屬性時(shí),成為方法。當(dāng)一個(gè)方法被調(diào)用時(shí),this被綁定倒該對(duì)象。如果一個(gè)調(diào)用表達(dá)式包含一個(gè)屬性存取表達(dá)式,那么它被當(dāng)作一個(gè)方法來(lái)調(diào)用。

var?muObject?=?{value?:?0,increment?:?function?(inc)?{this.value?+=?typeof?inc?===?"number"???inc?:?1;} };myObject.increment(); document.writeIn(myObject.value);??//?1myObject.increment(2); document.writeIn(myObject.value);??//?3

方法可以使用this去訪問對(duì)象,所以它能從對(duì)象中取值或修改該對(duì)象。this 倒對(duì)象的綁定發(fā)生在調(diào)用的時(shí)候。這個(gè) 超級(jí) 遲綁定(very late binding)使得函數(shù)可以對(duì)this 高度復(fù)用。通過(guò)this可取得它們所屬對(duì)象的上下文的方法成為 [公共方法]

函數(shù)調(diào)用模式
當(dāng)一個(gè)函數(shù)并非一個(gè)對(duì)象的屬性時(shí),那么它被當(dāng)作一個(gè)函數(shù)來(lái)調(diào)用:var sum = add(3,4); //sum 值為7
當(dāng)函數(shù)以此模式調(diào)用時(shí),this被綁定到全局對(duì)象。因此,內(nèi)部函數(shù)的this時(shí)無(wú)法共享該方法對(duì)對(duì)象的訪問權(quán)。解決方案:如果該方法定義一個(gè)變量并給它賦值為this,那么內(nèi)部函數(shù)就可也i通過(guò)那個(gè)變量訪問到this。如下所示:

myObject.double?=?function(){var?that?=?this;???????????????//?此處this指向的是myObject對(duì)象???????var?helper?=?function(){???????//?helper中的this指向的是?window,無(wú)法獲取valuethat.value?=?add(that.value,that.value);??//?改變myObject對(duì)象的value屬性值alert(this);???????????????//?[object?window]???}helper(); }myObject.double(); document.writeIn(myObject.getValue());?????//?6

構(gòu)造器調(diào)用模式
Javascript是基于原型繼承的語(yǔ)言。對(duì)象可以直接從其他對(duì)象繼承屬性。

如果在一個(gè)函數(shù)前面帶上new 來(lái)調(diào)用,那么將創(chuàng)建一個(gè)隱藏連接到該函數(shù)的 prototype 成員的新對(duì)象,同時(shí)this 將會(huì)被綁定到那個(gè)新對(duì)象上。new 前綴也會(huì)改變r(jià)eturn 語(yǔ)句的行為。

//創(chuàng)建一個(gè)名為Quo?的構(gòu)造器函數(shù)。它構(gòu)造一個(gè)帶有?status?屬性的對(duì)象。 var?Quo?=?function?(string)?{this.status?=?string; }; //給Quo?的所有實(shí)例提供一個(gè)名為get_status?的公共方法。 Quo.prototype.get_status?=?function?()?{return?this.status; } //構(gòu)造一個(gè)?Quo?實(shí)例 var?myQuo?=?new?Quo("confused"); document.writeIn(myQuo.get_status());

其目的就是結(jié)合new前綴調(diào)用的函數(shù),被成為構(gòu)造器函數(shù)。必須以首字母大寫格式來(lái)命名構(gòu)造器函數(shù),調(diào)用構(gòu)造器函數(shù)時(shí)必須在前面加上new 。

Apply調(diào)用模式?
apply 方法讓我們構(gòu)建一個(gè)參數(shù)數(shù)組并用其去調(diào)用函數(shù)。它允許我們選擇this 的值。apply 方法接收兩個(gè)參數(shù)。第一個(gè)是將被綁定給this 的值。第二個(gè)就是一個(gè)參數(shù)數(shù)組。

var?array?=?[3,4]; var?sum?=?add.apply(null,array);??//?sum=7var?statusObject?=?{status?:?'A-OK' };//statusObject?并沒有繼承Quo.prototype?,但仍可以在?statusObject?上調(diào)用?get_status?方法,盡管statusObject本身并沒有這個(gè)方法。 var?status?=?Quo.prototype.get_status.apply(statusObject);?//值為?'A-OK'

參數(shù)
當(dāng)函數(shù)被調(diào)用時(shí),會(huì)得到一個(gè)參數(shù)數(shù)組 arguments。通過(guò)它,函數(shù)可以訪問所有它被調(diào)用時(shí)傳遞給它的參數(shù)列表,包括那些沒有分配給函數(shù)聲明時(shí)定義的形式參數(shù)的多余參數(shù)。但這個(gè)數(shù)組,只有一個(gè)length屬性,它缺少所有的數(shù)組的方法。

返回
如果沒有返回值,則返回 undefined 。如果函數(shù)以在前面加上new 前綴的方式來(lái)調(diào)用,且返回值不是一個(gè)對(duì)象,則返回 this (該新對(duì)象)。

異常throw、try、catch:

try語(yǔ)句執(zhí)行一個(gè)代碼塊,并捕獲改代碼快拋出的任何一場(chǎng)。catch從句定義了一個(gè)新的變量,它將接受該異常對(duì)象。

throw 語(yǔ)句拋出一個(gè)異常。如果throw語(yǔ)句在一個(gè)try代碼塊重,那么控制權(quán)會(huì)跳到catch從句中。如果throw語(yǔ)句在函數(shù)中,則該函數(shù)調(diào)用被放棄,且控制權(quán)會(huì)跳到調(diào)用該函數(shù)的try語(yǔ)句的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; };

函數(shù)遞歸調(diào)用方法,實(shí)例:漢諾塔

回調(diào)

//樸素寫法request?=?prepare_the_request();response?=?send_request_synchronously(request);display(response);//回調(diào)寫法request?=?prepare_the_request();send_request_synchronously(request,function?(response){display(response);});

函數(shù)模塊

函數(shù)套用

函數(shù)記憶

for?(var?i?=?0;?i?<=?10;i?++){alert("?i?(?"?+?i?"?)?:?"?+?fibonacci(i)); }//普通寫法,被調(diào)用29次,自己調(diào)用了11次,它自身調(diào)用了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; }//回調(diào)寫法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); });

第五章 繼承?

偽類

第六章 數(shù)組?

數(shù)組:Javascript 提供了一種擁有類數(shù)組(array-like)特性的對(duì)象。它把數(shù)組的下表編程字符串,用其作為屬性。明顯地比一個(gè)真正的數(shù)組慢但它可以更方便地使用。屬性的檢索和更新的方式與對(duì)象幾乎一樣,除了有一個(gè)可以用整數(shù)作為屬性名的特性外。

基本操作:

var?numbers1?=?[]; var?numbers2?=?["a","b","c","d"]; var?numbers3?=?[4,5,78748,6456,"dafd"];numbers3.length;numbers3.length?=?50;???//?直接通過(guò)修改數(shù)組長(zhǎng)度,重新給數(shù)組分配空間numbers1.push("go");????//?向數(shù)組末位添加一個(gè)元素delete?numbers2[2;];??//?這樣刪除之后,被刪元素后面的數(shù)組元素不會(huì)改變下標(biāo),會(huì)在數(shù)組中遺留一個(gè)空洞numbers2.splice(2,1); //?從數(shù)組中下標(biāo)為2的元素開始,刪除?1?個(gè)元素。對(duì)于大型數(shù)組,效率不高。

?第七章 正則表達(dá)式?

正則表達(dá)式是一門簡(jiǎn)單語(yǔ)言的語(yǔ)法規(guī)范。以方法的形式被用于對(duì)字符串中的信息進(jìn)行查找、替換和提取操作。常用的方法有:regexp.exec、regexp.test 、string.match 、string.replace 、string.search 、string.split。

?

?

轉(zhuǎn)載于:https://my.oschina.net/maomi/blog/79108

總結(jié)

以上是生活随笔為你收集整理的【读书笔记】《Javascript语言精粹》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。