javascript(3、4)moduleモード、立実行関数(Evernote)

3229 ワード

基本的な特徴:
  • モジュール化
  • カプセル化変数とfunctionは、大域的なnamaspasceに接触しないで、松結合

  • publicだけを暴露します
     
  • 1.var blogModule = (function (my) {

    //

    return my;
    } (blogModule || {})); ---- blogmodule, {};

    2.var blogModule = (function (my) {
    var oldAddPhotoMethod = my.AddPhoto;

    my.AddPhoto = function () {
    // , oldAddPhotoMethod
    };

    return my;
    } (blogModule));
     
    このような方法によって、私達は重積載の目的を達成しました.もちろん内部で既存の属性を使い続けたいなら、oldAdd PhotoMethodを呼び出すことができます.
     
     
     
    3.クローズドで保存状態
    クローズドは、直接に入力されたこれらのパラメータを参照することができ、これらのロックされた着信パラメータを利用して、自己実行関数式から状態を効果的に保存することができる.
    //         ,    i     locked 
    // , , i
    // i
    // , I am link #10( 10 a )

    var elems = document.getElementsByTagName('a');

    for (var i = 0; i < elems.length; i++) {

    elems[i].addEventListener('click', function (e) {
    e.preventDefault();
    alert('I am link #' + i);
    }, 'false');

    }

    // ,
    // i locked , , i a ( 10)
    // lockedInIndex ,
    // ,

    var elems = document.getElementsByTagName('a');

    for (var i = 0; i < elems.length; i++) {

    (function (lockedInIndex) {

    elems[i].addEventListener('click', function (e) {
    e.preventDefault();
    alert('I am link #' + lockedInIndex);
    }, 'false');

    })(i);

    }

    // ,
    // addEventListener
    // ,

    var elems = document.getElementsByTagName('a');

    for (var i = 0; i < elems.length; i++) {

    elems[i].addEventListener(
    ‘click’,(function(locked Index){
     
       return function (e) { 
      
     
       e.preventDefault(); 
      
     
       alert('I am link #' + lockedInIndex); 
      

    };
    })(i), 'false');

    }





    4. c++ !!!//
    // return ,
    // counter, function

    var counter = (function () {
    var i = 0;

    return {
    get: function () {
    return i;
    },
    set: function (val) {
    i = val;
    },
    increment: function () {
    return i++;
    }
    };
    } ());

    // counter ,

    counter.get(); // 0
    counter.set(3);
    counter.increment(); // 4
    counter.increment(); // 5

    counter.i;//undefined iは、iがオブジェクトの属性iに戻るのではないため、//参照エラー:iは定義されていない(iはクローズドにしか存在しないため).
                                                                                                                         2015年1月