JS模块化模式-公共功能未执行

时间:2018-10-30 15:44:20

标签: javascript jquery modular

$( document ).ready(function() {
  var feature = (function() {
    var items = $( "#myFeature li" );

    var showItem = function() {
      currentItem = $( this );
      // more code goes here;
    };
 
    var showItemByIndex = function( idx ) {
      $.proxy( showItem, items.get( idx ) );
    };       
 
    items.click( showItem );
 
    return {
      showItemByIndex: showItemByIndex
    };
  })();
 
  feature.showItemByIndex( 0 );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="myFeature">
  <ul>
     <li>item 1</li>
     <li>item 2</li>
  </ul>
</div>

来自https://learn.jquery.com/code-organization/concepts/

的jQuery文档中的以上代码段

公共功能feature.showItemByIndex(0)未执行,有人可以说清楚吗?

1 个答案:

答案 0 :(得分:0)

看起来showItemByIndex函数是在页面加载时由行feature.showItemByIndex( 0 )调用的。

问题在于showItemByIndex实际上没有做任何有用的事情;它为showItem创建了代理功能(绑定了this关键字),然后对其不做任何操作。

如果修改示例,以便调用新创建的代理功能,则代码将按照人们期望的那样执行。

$( document ).ready(function() {
  var feature = (function() {
    var items = $( "#myFeature li" );

    var showItem = function() {
      currentItem = $( this );
      console.log('Show Item',this) // added some logging
    };
 
    var showItemByIndex = function( idx ) {
      $.proxy( showItem, items.get( idx ) )(); // call this proxy function!
    };       
 
    items.click( showItem );
 
    return {
      showItemByIndex: showItemByIndex
    };
  })();
 
  feature.showItemByIndex( 0 );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="myFeature">
  <ul>
     <li>item 1</li>
     <li>item 2</li>
  </ul>
</div>