JavaScript 2.0の新しい特性は先を争って経典言語に接近します.

14776 ワード

開発者と作家として、私の仕事の一部はweb世界の最新の発展の流れに従うことです.今は業界で起こったすべてのことについていくのは難しいと思いますが、あちこちで噂されている裏話が多くの注目を集めています.JavaScript 2.0の提案です.新しいJavaScript 2.0\EMCAScript 4.0として2009年末の原稿を予定していますが、先日多くの仕事をしました.今日は、この提案の規範の一部を見てみます.彼らはこの言語を改善しているのか、それともパパラッチを続けているのかを見てみます.
JavaScriptの歴史
JavaScript標準がどのように実現されているかをよりよく理解するために、この言語の歴史を簡単に見てみましょう.
JavaScriptはECMAScriptスクリプト言語の分岐です.ECMAScriptはEcma国際組織の標準化で、この言語のもう2つの分岐はアクションScript(macroMedia、Adobe)とJScript(マイクロソフト)です.JavaScriptはNetscapeのBrendan Eichが開発したもので、最初はMochaと呼ばれ、その後LiveScriptで、最後にJavaScriptに変更されました.19993.3月、Sun社はJavaScriptを支持するNavigator 2.0を発表しました.JavaScriptはクライアントスクリプト言語として広く流行しているため、マイクロソフトはスクリプト言語JScriptを制定し、19996.8月のIE 3.0に発表しました.NetscapeはジュネーヴでJavaScriptをEcma国際標準化機構に提出して、申請が標準になります.
Ecma国際標準化組織は情報、通信システムを管理し、メンバー制度に基づいて非営利的な国際機構である.この機関は最初はヨーロッパの標準化のために1991年に設立されました.創立後40年間で、Ecmaは全部で370通の標準と90個の科学技術報告を発表しました.CD-ROM巻とファイルシステム、c++言語規範と彼らの開放xml形式が含まれています.第一版のECMAScript(Ecma-622)は1997年Ecma全員大会で採択されました.JavaScriptもJScriptも、ECMAScriptに対応しています.Ecma仕様には提供されていない特別な付加的な特性も提供しています.今日でもJavaScriptとJScriptは互換性のないところがたくさんあります.JavaScriptはjava、c++などの対象言語に影響を受けています.これは初心者が簡単に使えるという意味です.
JavaScript 2.0の新しい特性言語の強化
もっと対象に向けて
これまでJavaScriptは、古典的な対象に向かっての継承ではなく、使用されてきたプロトタイプです.実は次の例のように、JavaScriptにはクラスのものがありません.

 
   
  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 
オブジェクトのコンストラクタが彼らのタイプのキャラクターと一緒になると,コンストラクタが倍になります.newを使って関数を呼び出すと新しいオブジェクトが作成されます.そして、bindからこのオブジェクトまでのローカルキーthisを使ってこの関数を呼び出すことができます.関数のプロトタイプはこのオブジェクトのプロトタイプを決定した.どのタイプの値が対象の原型に与えられても、彼のすべての実例と漢字に共有されます.プロトタイプを使って、JavaScriptは多くのclassに基づく特性を模擬することができます.例えば、以下のコードでは、MY OtherDocgは親DocgのgetBreed()関数を再ロードする試みを行う.myOtherDolgのgetBreed関数は実現できますが、彼はリロードできませんでした.

 
   
  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 
強いタイプ
ほとんどのスクリプト言語のように、JavaScriptも弱いタイプです.インタプリタは、動作時に値に基づいて、ある変数のデータタイプを決定します.この緩みは開発者が柔軟に再利用して変数を比較できるようにする.後者の場合、強制変換を使用して、2つの異なるデータタイプの値を比較することができます.JavaScriptは自動的に比較する前に彼らを同じタイプに変えます.

 
   
  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. 
対照的に、JavaScript 2.0はやや強いタイプになります.これは明示的に変数を説明しなければならないタイプを意味しています.スクリプトエンジンは強制的にタイプ転換しません.タイプは、属性、関数パラメータ、関数の戻り値、変数、オブジェクト、配列の初期化オブジェクトを与えることができます.タイプが定義されていない場合、変数または属性はデフォルトのObjectタイプに設定されます.これはすべてのデータタイプ階層のベースクラスです.使用:かかとのタイプを説明するのは賦のタイプの文法です.

 
   
  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 
上記の比較を行うためには、変換タイプが必要です.

 
   
  1. alert( int("42") == 42 ); //true  
  2. alert( int("42" == 42) + 1 ); //2  
  3. alert( "I live at " + string(99) + " Renolds street."); 
プログラムユニット
様々な人気のあるjsフレームワークを参考にして、プログラムユニットは非常に有用なコードモジュールであり、実行時に導入することができます.フレームとカスタマイズライブラリの数が増えているときには、これらはウェブプログラムに不可欠なコンポーネントとなっています.考えてみれば、何千何万行ものコードが含まれているライブラリたちは、一度にダウンロードするのはもう時宜ではない.これは疑似コードです

 
   
  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()); 
コンパイル時のタイプチェック
JavaScript 2.0では、JavaScriptモジュールをコンパイルするために厳格なモードを使用することができます.運行前に、いくつかの重要な方面の完全性を確認できます.JavaScript 2.0の新しい特性は以下を含みます.
静的タイプチェック
引用名の確認
定数の不正な割り当て
証明書で比較した二つの値には合法的なタイプの定数があります.
以前のJavaScript開発者はネーミング仕様を使用しなければなりませんでした.または慎重に制定された作業規則を使って彼らの定数を保護しなければなりません.これらはJavaScript 2.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フレームが次々と出現するにつれて、名前空間の使用はますます必要になってきました.この基準は現在、グローバルオブジェクトを作成して、あなた自身の機能を保護するために使用されています.以前のグローバルオブジェクトと関数がダウンしないようにします.
JavaScript 2.0の新特性まとめ
多くは2.0の提案に対して猛烈な批判を行って、それが経典の言語を思っていることを批判しています.
JavaScriptはダイナミックでフレキシブルで、原型継承と対象モデルを使うのは実用的で、基礎的な利点があります.なぜこのような優雅で柔軟なものをjavaに変える人がいますか?javaは基本的に強制的にプログラマーに古典を使わせています.classに基づく継承は分かりません.
個人的にはこれに対して複雑な感じがします.つまり、クラスや名前空間、常量などの良い変化を歓迎します.強いタイプの脚本変数に対しても風邪を引かないです.全体として、JavaScriptはアマチュアプログラマーに対してより厳格になり、より深刻な危険を冒しています.しかし、私もこれらのビジネスサイトが私のような専門家を使って彼らの業務プロセスをエンコードできることに感謝したいです.結果のいかんによらず、ウェブ開発の仕組みは劇的に変化するに違いない.
 
=====================================================================
回転:http://developer.51cto.com/art/200908/144506.htm