成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript 2.0新特性搶先看 向經(jīng)典語(yǔ)言靠近

開(kāi)發(fā) 前端
作者帶領(lǐng)我們搶先嘗鮮JavaScript2.0新特性,并為我們簡(jiǎn)要的介紹了下正在制定中的JavaScript2.0標(biāo)準(zhǔn),有許多新特性的介紹和相應(yīng)的代碼演示。

作為一個(gè)開(kāi)發(fā)者和作家,我的一部分工作就是跟隨web世界最新發(fā)展潮流——不管是關(guān)于公司合并、在線購(gòu)物潮流、或者是編程技巧。我承認(rèn)如今很難跟上 業(yè)界里發(fā)生的所有事情,但是有個(gè)四處流傳的小道消息卻吸引了許多的目光:JavaScript2.0提案。作為新的JavaScript2.0\EMCAScript 4.0計(jì)劃于2009年終稿,但是日前已經(jīng)做了很多的工作-包括好的、不好的。今天,我們來(lái)看看這份提案規(guī)范的一部分,看下他們是在改進(jìn)這門語(yǔ)言還是狗尾續(xù)貂。

JavaScript的歷史

為了更好的理解JavaScript標(biāo)準(zhǔn)是如何實(shí)現(xiàn)的,讓我們簡(jiǎn)要的看下這門語(yǔ)言的歷史吧

JavaScript是ECMAScript腳本語(yǔ)言的一個(gè)分支。ECMAScript 是Ecma國(guó)際組織標(biāo)準(zhǔn)化的,這門語(yǔ)言的另外2個(gè)分支是ActionScript(macroMedia,Adobe)和JScript(微軟)。JavaScript是有Netscape的Brendan Eich開(kāi)發(fā)的,最初叫Mocha而后是LiveScript,最后改為JavaScript。1993.3月,Sun公司發(fā)布了支持 JavaScript的Navigator2.0(譯者:我感覺(jué)這是錯(cuò)誤的,可查看原文)。鑒于JavaScript作為客戶端腳本語(yǔ)言取得廣泛流行,微軟制定了自己的腳本語(yǔ)言JScript,發(fā)布于1996.8月的IE3.0中。Netscape公司在日內(nèi)瓦提交了JavaScript給Ecma國(guó)際標(biāo)準(zhǔn)化組織,申請(qǐng)成為標(biāo)準(zhǔn)。

Ecma國(guó)際標(biāo)準(zhǔn)化組織是個(gè)管理信息、通信系統(tǒng)的、基于成員制度,非營(yíng)利性國(guó)際機(jī)構(gòu) 。這個(gè)機(jī)構(gòu)起初是為了標(biāo)準(zhǔn)化歐洲的計(jì)算而于1991年成立,在它成立后的40年間,Ecma總共出臺(tái)了370封標(biāo)準(zhǔn)和90個(gè)科技報(bào)告,其中包括了CD- ROM卷和文件系統(tǒng),c++語(yǔ)言規(guī)范和他們的開(kāi)放xml格式。第一版的ECMAScript(Ecma-262)于1997在Ecma全員大會(huì)上通過(guò)。不管JavaScript還是JScript他們都是兼容ECMAScript的,同時(shí)也提供了Ecma規(guī)范沒(méi)有提供的特殊的額外的特性。甚至在今天,JavaScript和JScript依然有個(gè)很多不兼容的地方。JavaScript受如java、c++等面向?qū)ο笳Z(yǔ)言的影響很深,這也意味著初 學(xué)者能很容易的上手。

JavaScript2.0新特性語(yǔ)言的增強(qiáng)

更加的面向?qū)ο?/P>

迄今為止,JavaScript是使用的原型來(lái)做繼承的,而不是經(jīng)典的面向?qū)ο笫降睦^承自父類。事實(shí)上,如下面實(shí)例的一樣,如今JavaScript沒(méi)有class的東西:

  1. // Current JavaScript 1.x "Class" Definition  
  2. function MyClass()  
  3. {  
  4.  this.member1 = "a string";  
  5.  this.member2 = 10;  
  6. }  
  7. var myClass = new MyClass(); // class instantiation  
  8.  
  9. // JavaScript 2.0 Class Definition  
  10. class TrueClass  
  11. {  
  12.  this.member1 = "a string";  
  13.  this.member2 = 10;  
  14. }  
  15. var trueClass = new TrueClass(); // class instantiation 

當(dāng)對(duì)象的構(gòu)造函數(shù)和他們類型角色一起的時(shí)候,構(gòu)造函數(shù)會(huì)翻倍。使用new調(diào)用函數(shù)的時(shí)候會(huì)創(chuàng)建一個(gè)新對(duì)象,而后你就可以使用被bind到這個(gè)對(duì)象的本地關(guān)鍵字this來(lái)調(diào)用這個(gè)函數(shù)。函數(shù)的原型決定了這個(gè)對(duì)象的原型。不管什么 類型的值賦予一個(gè)對(duì)象的原型,那么它都會(huì)被他所有的實(shí)例和漢字共享。使用原型,JavaScript可以模擬許多基于class的特性,盡管有些古怪。舉個(gè)例子,在下面的代碼中,myOtherDog嘗試去重載父類Dog的getBreed() 函數(shù)。雖然myOtherDog的getBreed()函數(shù)是能夠?qū)崿F(xiàn)的,但是他沒(méi)有重載成功——給了myOtherDog兩個(gè)面包。

  1. function Dog(name)  
  2. {  
  3.   this.name = name;  
  4.   this.bark = function() { alert('Woof!'); };  
  5.   this.displayName = function() { alert(this.name); };  
  6. };  
  7.  
  8. var myDog = new Dog('Killer');  
  9. myDog.displayName(); //Killer  
  10. myDog.bark(); //Woof!  
  11.  
  12. Dog.prototype.getBreed = function()  
  13. {  
  14.   alert("Mutt");  
  15. };  
  16.  
  17. myDog.getBreed(); //Mutt  
  18.  
  19. myOtherDog = new Dog('Bowzer');  
  20.  
  21. // this hides getBreed() from other Dogs  
  22. myOtherDog.getBreed = function()  
  23. {  
  24.   return "Lhasa Apso";  
  25. };  
  26. alert(myOtherDog.getBreed()); //Lhaso Apso and Mutt!  
  27.  
  28. alert(myDog.getBreed()); //function is undefined 

強(qiáng)類型

像大多數(shù)的腳本語(yǔ)言一樣,JavaScript也是弱類型的。解釋器會(huì)在運(yùn)行時(shí),基于值來(lái)決定某變量的數(shù)據(jù)類型。這種松散性使得開(kāi)發(fā)者可以很靈活的 重用和比較變量。在后種情況,使用強(qiáng)制類型轉(zhuǎn)換就可以比較兩種不同數(shù)據(jù)類型的值;JavaScript會(huì)自動(dòng)在比較之前將他們轉(zhuǎn)化成相同的類型。

  1. alert( "42" == 42 ); //true  
  2. alert( ("42" == 42) + 1 ); //2. the boolean true evaluates to 1.  
  3. alert( "I live at " + 99 + " Renolds street."); // the 99 int is converted to a string. 

相反的,JavaScript2.0會(huì)強(qiáng)類型化了些,這就意味著必須顯式的申明變量的類型,腳本引擎不會(huì)強(qiáng)制類型轉(zhuǎn)換了。類型可以賦予屬性、函數(shù)參數(shù)、函數(shù)返回值、變量、對(duì)象、數(shù)組的初始化對(duì)象。如果沒(méi)有定義類型,那么變量或者屬性被設(shè)置為默認(rèn)的Object類型,這是所有的數(shù)據(jù)類型層級(jí)的基類。使用:后跟類型申明的是賦類型的語(yǔ)法:

  1. var a:int = 100; //variable a has a type of int  
  2. var b:String = "A string."//variable b has a type of String  
  3. function (a:int, b:string)//the function accepts two parameters, one of type int, one of type string  
  4. function(...):int //the function returns a value with a type of int 

為了進(jìn)行上述的比較,你需要轉(zhuǎn)換類型:

  1. alert( int("42") == 42 ); //true  
  2. alert( int("42" == 42) + 1 ); //2  
  3. alert( "I live at " + string(99) + " Renolds street."); 

程序單元體

借鑒了各種流行js框架,程序單元體是很有用的代碼模塊,它可以在運(yùn)行時(shí)導(dǎo)入。當(dāng)框架和自定義庫(kù)數(shù)量越來(lái)越多的時(shí)候,這些已經(jīng)成為web程序不可或缺的組成部分。設(shè)想下,包含了成千上萬(wàn)行代碼的庫(kù)們,一次性下載他們已經(jīng)不合時(shí)宜了。這是偽代碼:

  1. use unit Effects "http://mysite/lib/Effects";  
  2. use unit Utils "http://mysite/lib/Utils";  
  3. var panel = new Panel();  
  4. panel.setTime(Util.getFormattedTime()); 

編譯時(shí)的類型檢查

在JavaScript2.0 里,你可以使用嚴(yán)格模式來(lái)編譯JavaScript模塊。在運(yùn)行之前,它可以檢查幾個(gè)重要的方面的完整性,JavaScript2.0新特性包括:

靜態(tài)類型檢查

引用名稱確認(rèn)

對(duì)常數(shù)的非法賦值

證比較的兩個(gè)值有合法的類型
常數(shù)

先前的JavaScript開(kāi)發(fā)者不得不使用命名規(guī)范或者精心制定的工作規(guī)則保護(hù)他們的常量。而這些在JavaScript2.0都是不需要的:

  1. //JavaScript 1.x constant  
  2. var CULTURE_CONST = "Do you really want to change me?"// constant in appearance only.  
  3. //JavaScript 2.0 constant  
  4. const HAMMER_TIME = "You can't touch this!" // a true constant. 

命名空間

隨著js框架的不斷涌現(xiàn),使用命名空間已經(jīng)變得越來(lái)越必要了。這個(gè)標(biāo)準(zhǔn)目前被用作創(chuàng)建全局對(duì)象來(lái)保護(hù)你自己的功能不給先前的全局對(duì)象和函數(shù)擊倒在地(直譯)。

JavaScript2.0新特性總結(jié)

許多向?qū)?.0提案進(jìn)行了猛烈的抨擊,批評(píng)它在想經(jīng)典的語(yǔ)言如c++、java在靠近。

“...JavaScript是動(dòng)態(tài)、靈活的,使用原型繼承和對(duì)象模型是很實(shí)用,很基礎(chǔ)的優(yōu)勢(shì),為什么有人要把這些那么優(yōu)雅、靈活的東西變成java呢,java基本上強(qiáng)制性的讓程序員使用古典的,基于class的繼承——我搞不懂。”

而我個(gè)人對(duì)此很感受很復(fù)雜,即歡迎像class,命名空間,常量這樣好的變化,也對(duì)強(qiáng)類型腳本變量很不感冒。總體上說(shuō),JavaScript冒著對(duì)業(yè)余程序員變得更嚴(yán)格,相應(yīng)的更嚴(yán)肅的危險(xiǎn) 。不過(guò),我也想應(yīng)該感謝那些商業(yè)網(wǎng)站能夠使用像我這樣的專業(yè)人士來(lái)編碼他們的業(yè)務(wù)流程。不管結(jié)果如何,無(wú)疑web開(kāi)發(fā)的格局將會(huì)發(fā)生戲劇性的改變。

【編輯推薦】

  1. JavaScript轉(zhuǎn)正在即
  2. JavaScript類和繼承:this屬性
  3. ExtJS Grid Tooltip的3+1種實(shí)現(xiàn)方式總結(jié)
  4. 討論:是什么讓我們愛(ài)上Javascript?
  5. 開(kāi)源語(yǔ)言排行榜:PHP與JavaScript受青睞
責(zé)任編輯:彭凡 來(lái)源: cnbeta
相關(guān)推薦

2023-09-20 10:56:30

Fedora 39Linux

2011-04-11 09:11:42

GNOME 3

2014-08-26 10:47:04

Win9微軟

2019-03-29 09:51:23

軟件開(kāi)發(fā)者 性能

2010-03-05 08:56:14

JSFUnit 1.2

2015-08-12 16:34:25

DockerDocker 1.8新版本特性

2022-01-09 23:40:33

Windows 11Windows微軟

2022-01-07 20:58:35

Windows 11操作系統(tǒng)微軟

2020-11-04 11:05:38

JavaScript新特性前端

2014-09-12 10:46:35

Java9

2010-03-16 14:05:57

Eclipse 3.6

2010-11-03 09:18:03

Zend Studio

2011-09-05 10:31:10

Ubuntu 11.1Ubuntu

2013-09-24 09:52:24

2013-08-20 17:46:43

通達(dá)OA

2021-03-06 07:33:25

Windows10操作系統(tǒng)21H2

2017-08-08 15:14:48

LinuxUbuntu新功能

2013-03-11 11:28:16

蘋果數(shù)據(jù)中心iCloud

2017-03-21 10:02:34

2009-06-15 16:15:37

Spring2.0新特
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产91一区二区三区 | 国产一区二区精品在线 | 国产乱码精品一区二区三区忘忧草 | 成人欧美一区二区三区在线播放 | 亚洲视频www | 国产精品一区久久久 | 黄色在线免费观看视频 | 精品国产一区二区三区久久 | 国产一区二区三区免费 | 成人小视频在线观看 | 亚洲手机视频在线 | 国产一区二区三区高清 | 美女亚洲一区 | 欧美大片在线观看 | 日韩综合一区 | 欧美一区二区视频 | 亚洲免费一区二区 | 91成人在线| 亚洲草草视频 | 亚洲欧洲日韩精品 中文字幕 | 精品久久精品 | 国产欧美精品一区二区三区 | 91久久久久久久久久久 | 久久1区 | 亚洲女优在线播放 | 国产精品一区二区久久 | 日韩福利视频 | 精品国产一区久久 | 一区二区三区在线免费 | 国产精品国产三级国产aⅴ无密码 | 亚洲 自拍 另类 欧美 丝袜 | 日本不卡在线视频 | 国产精品亚洲一区二区三区在线 | 国户精品久久久久久久久久久不卡 | 国产成人短视频在线观看 | 国产精品日产欧美久久久久 | 精品欧美一区二区三区久久久 | 日韩欧美视频网站 | 免费的网站www | 免费亚洲成人 | 国产成人在线视频 |