Ø Javascript語(yǔ) " /> 日韩有码一区,色呦呦久久久,亚洲www色

色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

Javascript 學(xué)習(xí)書(shū) 推薦

Aaron Gustafson著,李松峰 李雅雯 等譯。感覺(jué)絕對(duì)是一本值得看的書(shū)。感興趣的朋友可以看一下。下面是我從其中抽出來(lái)的Javascript常見(jiàn)陷阱和對(duì)象的概念整理出來(lái)的。希望對(duì)大家能有一些幫助。

Ø Javascript語(yǔ)法中常見(jiàn)的陷阱

² 區(qū)分大小寫(xiě)

² 單引號(hào)和雙引號(hào)實(shí)際上是沒(méi)有特殊的區(qū)別的,這點(diǎn)我是從看了這本書(shū)才開(kāi)始真正的知道,雖然在以前寫(xiě)程序時(shí)寫(xiě)過(guò)‘'號(hào)的字符串形式,但是卻沒(méi)有先覺(jué)性的發(fā)現(xiàn)“哦,原來(lái)這樣也可以。”

另外大多數(shù)情況下還都是用‘'來(lái)表示字符串的,因?yàn)閄HTML規(guī)范要求所有XHTML屬性值都用“”括起來(lái)。這樣混合代碼時(shí)會(huì)很清晰。

² 換行,千萬(wàn)不要忽略這一點(diǎn)。因?yàn)槿绻谝粋€(gè)字符串中你用了回車(chē)做換行那么對(duì)不起了,瀏覽器會(huì)告訴你我不認(rèn)識(shí)你的字符串。因?yàn)樗鼤?huì)自動(dòng)將回車(chē)轉(zhuǎn)換成”;“但是為了解決這個(gè)問(wèn)題,還好它提供了一個(gè)轉(zhuǎn)義字符作為替代。如下所示:

var='<h2 class=”a”>A list</h2>/

<ol>/

<li class=”a”></li>/

</ol>'

有人會(huì)說(shuō)可以用加號(hào)的,這些我知道。用加號(hào)作為字符串的操作符。估計(jì)是底層進(jìn)行了+號(hào)的重載(?!)。

² 可選的分號(hào)和花括號(hào)

如果你不相信,我告訴你這是可以的。可以說(shuō)這點(diǎn)Javascript做的還是比較智能的。但是和前述那本書(shū)作者一樣,我想我們做程序員還是規(guī)規(guī)矩矩些比較好。

² 重載

有時(shí)候或許你會(huì)突發(fā)奇想曲做一個(gè)Javascript的重載函數(shù),你會(huì)發(fā)現(xiàn)這時(shí)候竟然只有最后一個(gè)可以運(yùn)行,前面的都沒(méi)有得到錄用機(jī)會(huì)。這是什么原因呢?

原來(lái),先前的某某已經(jīng)被后面的給替換掉了。也就是通常說(shuō)的覆蓋。再進(jìn)一步說(shuō)就是程序只引用作用域鏈中的最后一個(gè)同名函數(shù)。

² 匿名函數(shù)

不得不說(shuō)這個(gè)家伙很有用。

² 作用域解析和閉包

這個(gè)作用域相信大家都比較熟悉,因?yàn)槊總€(gè)編程語(yǔ)言都有這樣的概念。

而作用域鏈?zhǔn)怯脕?lái)描述一種路徑的屬于,沿著該路徑可以確定變量的值(或者當(dāng)函數(shù)被調(diào)用時(shí)要使用的方法)

閉包是與作用域相關(guān)的一個(gè)概念,它指的是內(nèi)部函數(shù)即使在外部哈數(shù)執(zhí)行完成并終止以后,仍然可以訪問(wèn)其外部函數(shù)的屬性。當(dāng)引用一個(gè)變量或方法時(shí),Javascript會(huì)沿著由對(duì)象執(zhí)行路徑構(gòu)成的作用域鏈進(jìn)行解析,查找變量最近定義的值。一旦找到,即使用該值。

² 迭代對(duì)象

不要懷疑這用的不好的話,很可能會(huì)產(chǎn)生錯(cuò)誤。不信就看這一個(gè)例子:

var all=document.getElementsByTagName(‘*');

for(i in all){

//對(duì)all[i]元素進(jìn)行操作。

}

由于返回的會(huì)分別等于length、item和namedItem,而這個(gè)很可能會(huì)導(dǎo)致代碼中出現(xiàn)意外錯(cuò)誤。

這時(shí)要做一下處理。用hasOwnProperty進(jìn)行屬性過(guò)濾,這個(gè)函數(shù)在對(duì)象的屬性或方法是非繼承的時(shí)返回true。方法如下:

var all=document.getElementsByTagName(‘*');

for(i in all){

if(!all.hasOwnProperty(i)){continue;}

//對(duì)all[i]元素進(jìn)行操作。

}

² 函數(shù)的調(diào)用和引用。

注意了,這是不同的,調(diào)用會(huì)執(zhí)行,引用只會(huì)給變量一個(gè)copy(好像可以這樣理解吧?)

看下這個(gè):

var foo=exampleFunction();

var foo=exampleFunction;

這兩句式不一樣的。前一個(gè)是執(zhí)行exampleFunction這個(gè)函數(shù)并將返回值賦給變量foo,而后一個(gè)卻是將exampleFunction這個(gè)函數(shù)的引用賦給foo。

Ø Javascript對(duì)象

屬性和方法的概念相信大家都曉得。下面講下Javascript中的對(duì)象和其中的玄奧妙義(講的跟武俠似的)。

1. 繼承

Javascript的繼承讓我很奇怪,但是想過(guò)之后感覺(jué)還是有道理的。而且和其他的還是一樣的思想。其實(shí)Javascript就是做了一個(gè)復(fù)制的操作。閑話不說(shuō)看一個(gè)例子相信大家都會(huì)清楚了。

//創(chuàng)建一個(gè)person對(duì)象的實(shí)例

var person={};

person.getName=function(){……};

person.getAge=function(){……};

//創(chuàng)建一個(gè)employee對(duì)象的實(shí)例

var employee={};

employee.getTitle=function(){……};

enployee.getSalary=function(){……};
//從person對(duì)象中繼承方法

employee.getName=person.getName;

employ.getAge=person.getAge;

2. 創(chuàng)建自己的對(duì)象

有兩種方式可以創(chuàng)建自己的對(duì)象:

第一種:var myObject =new Object();

第二種:var myObject={};//是第一種的簡(jiǎn)寫(xiě)形式。實(shí)際上面已經(jīng)用到了。

3. 創(chuàng)建構(gòu)造函數(shù)

第一種:function myConstructor(a){

//代碼

}

不要驚訝,想象前面說(shuō)的Javascript中到處都是對(duì)象,雖然有些夸張。這個(gè)函數(shù)一時(shí)一個(gè)對(duì)象。

第二種:

或許聰明的讀者已經(jīng)猜出來(lái)了,就是函數(shù)定義的另外兩種類(lèi)型:

var myConstructor=function(a){};

第三種也一起寫(xiě)出來(lái)吧:var myConstructor=new Function(‘a(chǎn)',/*某些代碼*/);

不過(guò)對(duì)于這種方式,因?yàn)闀?huì)導(dǎo)致性能問(wèn)題,所以還是用function比較妥當(dāng)。

最后給個(gè)書(shū)中的例子:

function myConstructor(message){

alert(message);

this.myMessage=message;

}

var myObject =new myConstructor(‘Instantiating myObject!');

4. 添加靜態(tài)方法

var myObject={};

//添加屬性

myObject.name=”Jeff”;

//添加方法

myObject.alertName=function(){

alert(this.name);

}

//執(zhí)行方法

myObject.alertName();

相信大家都能看明白,不說(shuō)了。

5. 想原型中添加公有方法

添加公有方法的方式是用prototype,注意這里的prototype可不是那個(gè)js庫(kù)。

//創(chuàng)建構(gòu)造函數(shù)

function myConstructor(message){

alert(message);

this.myMessage=message;

}

//添加一個(gè)公有方法

myConstructor.prototype.clearMessage=function(string){

this.myMessage+=''+string;

}

這里面要提的一點(diǎn)是 構(gòu)造函數(shù)中凡是以var開(kāi)頭的變量全部是私有變量,不是以.號(hào)和prototype添加而是直接寫(xiě)入構(gòu)造函數(shù)中的為私有函數(shù)。

6. 最后提一下對(duì)象字面量

對(duì)象字面量對(duì)于代碼的重構(gòu),冗余度的減小都很有幫助。所以如果可能的話最好用這種

看下下面的例子:

var myObject={

propertyA:'value',

propertyB:'value',

methodA:function(){}

}

不得不同意作者的觀點(diǎn),這種方式很優(yōu)雅。

怎么樣?是不是對(duì)Javascript中的對(duì)象和陷阱有了一些基本的認(rèn)識(shí)?希望這篇文章對(duì)你有所幫助。

JavaScript技術(shù)Javascript 學(xué)習(xí)書(shū) 推薦,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 屏东市| 丰镇市| 益阳市| 三江| 万宁市| 宜丰县| 老河口市| 沙雅县| 宜宾县| 定西市| 尚义县| 长岛县| 泰兴市| 徐水县| 裕民县| 潼南县| 涪陵区| 连江县| 弥勒县| 恩平市| 鹿泉市| 锦州市| 康定县| 门源| 乐山市| 临潭县| 格尔木市| 宝清县| 龙江县| 抚顺市| 博罗县| 枣阳市| 建瓯市| 和林格尔县| 石阡县| 峡江县| 武功县| 南昌县| 梁平县| 张北县| 龙南县|