Javascriptのエッセンスですね.

6398 ワード

私はちょっとだけ好きなところがありますが、何か魅力的な魔力がありますか?
一.文法
JSは一つの数字タイプしかなくて、64ビットの浮動小数点がありますので、1と1.0は同じです.なぜこのように設計されたのですか?短い整体型のオーバーフローを防止します.
 
二.オブジェクト
1.通常、オブジェクトの値を別の変数に割り当てる方法
if(car.name!=null){
    a=car.name;  
}else{
    a='unknown';
}
テクニック(標準値):
a=car.name||"unknown";
 2.オブジェクトの属性から値を取る試み
通常
if(car!=undefined){
   a=car.age;
} 
       
テクニック:
a=car&&car.age;
3.列挙の属性
普通は簡単にfor inを使います.
var name;
for(name in  car ){
   ...
}
このような結果は遍歴した属性です.あなたは予知できないかもしれません.プロトタイプの属性を遍歴します.
 
小技巧:for inを適用しないで、代わりにfor循環を使います.
var properties=[
     'name',
     'status',
      'useTime'
];

for(var i=0;i<properties.length;i++){
    car[properties[i]]  ...
}
4.属性の削除
このものはあまり使われないかもしれませんが、道理があります.第三者のクラスライブラリを使う時に、クラスが提供する方法で作成したオブジェクトは私のいらない属性があります.このオブジェクトをJSON形式の文字列に変換したいです.この時、属性を削除するという機能が特に強いです.
Delete car.name ;
三.関数
1.呼び出し
JSには4つの呼び出しがあります.
  • メソッド呼び出しモード
  • 関数呼び出しモード
  • コンストラクションモード
  • appy呼び出しモード
  • 四つのパターンの違いは、this指向にあります.
    方法の呼び出しパターンはよく理解できます.私達はC〓を書いてCARを定義し、CARに方法RUNを定義します.この時はオブジェクトのjepを実例化します.それでは、方法の呼び出しはjep.RUNです.
    JSの中でも同じです 
    var jeep ={
        run:function(){
         ...
        }
    };
    
    
    jeep.run();
    thisは呼び出しの対象を指します.
    関数コールモードは、add 2関数が呼び出されるように、直接関数名を書きます.
            function add(a, b) {
                return a + b;
            }
           var shuxue={};
           shuxue.calculate1 = function () {
                var add2 = function () {
                    this.value=this.add(3, 3);
                }
    
               add2();//      
    
            }
            shuxue.calculate1();//      
            document.write(shuxue.value);//undefined
    
            shuxue.calculate2 = function () {
                var that=this;
                var add2 = function () {
                    that.value=this.add(3, 3);
                }
    
                add2();//      
    
            }
            shuxue.calculate2();//      
            document.write(shuxue.value);//6
    ここのthis指向はちょっと問題があります.JS設計の最初は全体を指しています.そうすると上のコードの異常を招きます.コードはshuxueのオブジェクトを定義して、二つの方法を定義しました.calculate 1とcaculate 2は同じ関数の内部でadd 2関数を呼び出しました.add 2関数の中でオブジェクトに属性を追加しようとしています.
    value、caculate 1の方式は失敗しました.calculate 2の方式は成功しました.違いは後者がthis(この時のthisはこの関数を指す)を関数に与えた内部変数thatを固定しました.埋め込まれた関数は外部関数の変数を使って、つまり閉じたパケットを形成しました.前者はグローバルを指します.
    コンストラクタ呼び出しモード
    var Car=function(){};
    
    var jeep=new Car();  //    ,       new ,      ,         
    thisはこのnewの対象を指します.
    アプリ呼び出しモード
    JSは関数式のオブジェクト指向プログラミング言語ですので、関数は方法を持ちます.
            function add(a, b) {
            return a + b;
            }
    
            var result=add.apply(null,[3,4]);
            document.write(result);// 7
    
            function getName(){
                return this.name;
            }
    
            var car={name:'jeep'};
    
            var name=getName.apply(car);//  car   getName  
            document.write(name); //  jeep
     this指向アプリの最初のパラメータ
    2.モジュール
     JSが大域変数の濫用を引き起こしやすいことを知っています.だから、JSはクローズドと関数のスコープを利用してモジュールを構築する方法を提供しました.
            var man=function(){
                var age=12;
                return {
                    getYear:function(){
                        return age;
                    },
                    setYear:function(n){
                        age=n;
                    }
                }
            }
    
            var peter=man();
            document.write(peter.getYear()); //12
            peter.setYear(20);
            document.write(peter.getYear());//20
            document.write(peter.age); //undefined             
     
    3.カスケード
    これはもう多くのプログラム猿たちに愛されました.
        var man=function(){
                var age=12;
                return {
                    getYear:function(){
                       alert(age);
                        return this;
                    },
                    setYear:function(n){
                        age=n;
                        return this;
                    }
                }
            }
    
            var peter=man();
            peter.getYear().setYear(20).getYear();  //