2012-10-05 51 views
0

我無法在JavaScript類/ jQuery插件的閉包範圍內分配一些變量。封閉式變量不可用

當我進入Article.initObj(),本條類的構造函數,我看不到任何domElementsettings在我關閉範圍,但我可以看到metestVar。這讓我很困惑。任何人都可以對這裏可能發生的事情有所瞭解嗎?

編輯:我試過這兩個Firefox和鉻。

這裏是我的HTML:

<html> 
    <head> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
     <script type="text/javascript" src="ArticleNav.js"></script> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       // Init our Viomedia article graph 
       var articleList = $("#entityList").children().ArticleNav();    
      }); 
     </script> 
    </head> 
    <body> 
     <div id="leftPanel" class="vpanel"> 
      <div id="#search"> 
       <label for="searchField">Search </label> 
       <input style="float: right;" name="searchField" id="searchField"/> 
      </div> 
      <div id="tree"> 
      </div> 
     </div> 
     <div id="rightPanel" class="vpanel"> 
      <div id="entityList" > 
       <div class="article program" id="1"> 
        <div class="title">The Simpsons</div> 
        <div class="article playlist" id="2"> 
         <div class="title">Classic Episodes</div> 
         <div class="article episode" id="6"> 
          <div class="title">Homer the Heretic</div> 
         </div> 
        </div> 
        <div class="article season" id="3"> 
         <div class="title">Season 4</div> 
         <div class="article episode" id="4"> 
          <div class="title">Kamp Krusty</div> 
         </div> 
         <div class="article episode" id="5"> 
          <div class="title">A Streetcar Named Marge</div> 
         </div> 
         <div class="article episode" id="6"> 
          <div class="title">Homer the Heretic</div> 
         </div> 
         <div class="article episode" id="7"> 
          <div class="title">Lisa the Beauty Queen</div> 
         </div> 
        </div> 
       </div> 
       <div class="artist article" id="7"> 
        <div class="title">Electric Light Orchestra</div> 
        <div class="article album" id="8"> 
         <div class="title">The Essential Electric Light Orchestra</div> 
         <div class="article album" id="9"> 
          <div class="title">Disc 1</div> 
          <div class="article track" id="10"> 
           <div class="title">So Serious</div> 
          </div> 
         </div> 
         <div class="article album" id="11"> 
          <div class="title">Disc 2</div> 
          <div class="article track" id="12"> 
           <div class="title">Last Train to London</div> 
          </div> 
         </div> 
        </div> 
       </div> 
       <div class="program article" id="13"> 
        <div class="title">Archer</div> 
       </div> 
      </div> 
     </div> 
    </body> 
</html> 

這裏是我的jQuery插件:

(function($){ 

    var Article = function (element, options) 
    { 
     var me = this; 
     var testVar = "I can read this"; 
     var domElement = $(element); 

     var settings = $.extend({}, options || {}); 

     this.initObj = function() 
     { 
      me.test(); 
     }; 

     this.test = function() 
     { 
      console.log(testVar); 
     }; 

     this.initObj(); 
    }; 

    var construct = function(element) { 
     var element = $(element); 
     // If this element already has this plugin attached to it. 
     if(element.data('Article')) { 
      return; 
     } 

     var ArticlePlugin = new Article(element); 
     element.data('Article', ArticlePlugin); 
    }; 

    $.fn.ArticleNav = function(func) { 

     return this.each(function() 
     { 
      switch (func) { 
       default: 
        construct(this); 
        break; 
      } 
     }); 
    }; 

}(jQuery)); 

回答

1

domElement可從.initObj()從父關閉範圍。你真的嘗試過使用它還是你沒有在調試器中看到它?

如果通過initObj()在調試器步進,你不會看到domElement在調試器中的局部變量,因爲它是在一個較高的範圍,但如果你在它上面做一個明確的手錶,你就可以看見。如果你寫代碼initObj()引用它,它會工作。

同爲settings

+0

感嘆。是的,這是我的調試器第二次對我撒謊。現在感覺很愚蠢。謝謝! – Drew