2015-12-03 165 views
1

Using jQuery as suggested by Wordpress内访问的功能,我已经包裹着我在一个匿名函数的代码,这样的jQuery不会与其他JavaScript库冲突:的Javascript:匿名函数

(function($) { 

    // Inside of this function, $() will work as an alias for jQuery() 
    // and other libraries also using $ will not be accessible under this shortcut 

})(jQuery); 

的问题是,我想我的代码分割成两个文件:1)main.js和2)utility.js。

当两者都被封装时,主程序(main.js)如何在其他文件(utility.js)中调用函数?

utility.js

(function($) { 

function doSomething() { 
    /* code here */ 
} 

})(jQuery); 

main.js

(function($) { 

$(document).ready(function(){ 
    doSomething(); 
} 

})(jQuery); 

感谢

+1

除了下面的答案,我会看看[namespacing](http://addyosmani.com/blog/essential-js-namespacing/) – Tomanow

+0

感谢您阅读Tomanow。将研究这一点。 – alds

回答

3

你可以用它来返回一个对象了这个utility.js的

(function($, win) { 
 
    win.util = function(){ 
 
    this.doSomething = function() { 
 
     $('pre').append('util.js'); 
 
    } 
 
    }; 
 
})(jQuery, window); 
 

 
(function($, $U) { // <----referred it with $U 
 

 
    $(document).ready(function() { 
 
    $U.doSomething(); 
 
    }); 
 

 
})(jQuery, new util()); //<----pass the util object here.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<pre></pre>


其实我喜欢OOJS的方式来使用它的方式。尝试创建一个构造函数并传递一个新对象。

+0

它正在工作。谢谢。虽然有一些额外的问题。下面的代码和pablochan代码都可以工作。从PHP背景来看,为什么你必须将util分配为一个函数,而不仅仅是pablochan所做的一个对象,这似乎更直接?这只是偏好,还是这是一种更安全或更可扩展的方法?另外,为什么我们需要'新'而不是'window.util'会引发错误? pablochan代码不使用new()。再次感谢! – alds

+0

@alds这与其他答案一样。这里的事情是你已经传递了一个对象作为参考。关键字'this'被用作全球可用的公共财产。但另一个答案作为一个函数使用,而且它也很好,但用作对象是更好的方法。 – Jai

+0

谢谢Jai。必须阅读了解所有这些差异 – alds

2

最简单的解决方案是将utility.js中的所有功能分配给某个全局对象。假设你的代码在浏览器中,你可以做这样的事情:

utility.js

(function($, context) { 

context.Utility = { 
    doSomething: function() { 
     /* code here */ 
    } 
}; 

})(jQuery, window); 

main.js

(function($, Utility) { 

$(document).ready(function(){ 
    Utility.doSomething(); 
} 

})(jQuery, Utility); 

一个更普遍的解决办法是使用异步模块加载(http://requirejs.org/)或类似JSPM的工具来管理应用程序中的模块。

+0

它的工作。谢谢@pablochan。另外提到require.js和JSPM。因为他们对我来说是新的,所以我不得不在他们的阅读。 – alds