Javascript 从jQuery函数内部公开函数
我有一块JavaScript/jQuery可以正常工作Javascript 从jQuery函数内部公开函数,javascript,jquery,Javascript,Jquery,我有一块JavaScript/jQuery可以正常工作 <script type="text/javascript"> $(function () { function doSomething() { // Do something amazing here! } // Many various jQuery handlers and support functions }); </s
<script type="text/javascript">
$(function () {
function doSomething() {
// Do something amazing here!
}
// Many various jQuery handlers and support functions
});
</script>
$(函数(){
函数doSomething(){
//在这里做一些令人惊奇的事情!
}
//许多不同的jQuery处理程序和支持函数
});
但是现在我希望我的doSomething()
函数可以从同一页面上的另一个脚本块调用
我知道我可以通过将doSomething()
移动到jQuery函数之外($(函数(){})
)来实现这一点。但是doSomething()
将无法调用jQuery函数内部的helper函数
我可以将其他函数移到jQuery函数之外,但其中一些函数是需要初始化的处理程序,它们共享相同的助手函数
有没有一种方法可以将我的所有函数都保存在jQuery函数内,但只在jQuery函数外显示其中一个函数
还有关于我可以去哪里阅读这篇文章的建议吗?好吧,事实上你应该把你的逻辑从这个包装上移开 它用于初始化应该在DOM就绪后运行的逻辑。你不应该在这里做任何事情 考虑以下代码模式:
(function($) {
// Your logic here
// You could safely export your functions to
// global scope from here, if you really need
var app;
app = {
forms: doSomething
};
function doSomething() {
// Do something amazing here!
}
window.app = app;
$(function() {/* start interact with DOM */});
}(jQuery));
您可以通过扩展jQuery来实现这一点:
$.extend({
foo: new function () {
var _self = this;
_self.doSomething = function () {
};
_self.initialize = function () {
$('#button-x').click(function(){
_self.doSomething(); //use the function inside
});
};
});
$(function () {
$.foo.initialize();
$.foo.doSomething(); //use the function outside
});
JavaScript具有功能范围。因此,如果函数嵌套在
$(function () { ... });
是因为它只能在该函数的范围内访问
您可以轻松地移动该函数定义:
在$(function(){…})
函数之外,仍然可以访问$(function(){…})
函数范围内的变量,方法是将变量作为参数传递给函数,然后让它返回任何修改:
$(function () {
var blah = 'blah';
var result;
result = doSomething(blah);
// Many various jQuery handlers and support functions
});
function doSomething(blah) {
// Do something amazing here!
return newBlah;
}
// Now you can call your doSomething function in the global scope too
var example = "test";
var result = doSomething(example);
“我希望我的…函数可以从同一页上的另一个脚本块调用”。为什么要这样做?@AlexW:因为这是一个庞大的WebForms项目,包含数百个组件,其中一些组件需要在客户端与其他组件进行交互。为什么要在
$(function(){…})中定义任何函数代码>?我看不出你为什么要这么做。我会把它们都放在外面Johnatha我会建议你花时间学习RequireJS,它将帮助您将模块化引入代码,并对代码进行一些其他改进project@LeshaOgonkov:谢谢,但在开始使用新技术之前,我对学习JavaScript和jQuery更感兴趣。如果你还没有弄明白,我的背景是JavaScript以外的语言。所以你的第一个建议没有给我提供任何新的或有用的信息。是的,我可以考虑你建议的式样。但就目前而言,我不知道我为什么要这么做。事实上,我甚至不明白它是做什么的。我的第二句话是关于为什么应该这样做。简而言之:你不需要等待DOM,初始化你的逻辑代码,也许我可以这样重新构造它。我知道有很多方法可以让JavaScript更加面向对象,而这正是我所缺乏的知识。我希望能有更多类似的东西,但这也许是我目前任务的最佳答案。
$(function () {
var blah = 'blah';
var result;
result = doSomething(blah);
// Many various jQuery handlers and support functions
});
function doSomething(blah) {
// Do something amazing here!
return newBlah;
}
// Now you can call your doSomething function in the global scope too
var example = "test";
var result = doSomething(example);