Javascript函数

Javascript函数,javascript,design-patterns,Javascript,Design Patterns,我们试图根据请求地址只提供某些要运行的函数 我想知道我们如何做到这一点: if(condition1) { $(document).ready(function() { ... ... // condition1's function }); } else if(condition2) { $(document).ready(function() { ... ... /

我们试图根据请求地址只提供某些要运行的函数

我想知道我们如何做到这一点:

if(condition1) 
{
    $(document).ready(function() {
        ...
        ... 
        // condition1's function
    });
}
else if(condition2) 
{
    $(document).ready(function() {
        ...
        ... 
        // condition2's function
    });
else if...

我想知道什么样的好模式适用于此?因为我们的所有函数都在一个文件中。

我看不出有任何问题。但这可能更好:

$(document).ready(function() {
    if (condition1) 
       // condition1's function
    else if (condition2)
       // condition2's function
    ...
});

我看这没什么问题。但这可能更好:

$(document).ready(function() {
    if (condition1) 
       // condition1's function
    else if (condition2)
       // condition2's function
    ...
});

也许你可以提供更多关于你到底在做什么的细节,但从我能告诉你的情况来看,你为什么不制作一个不同的JS文件,其中包含每个页面所需的函数,而不是尝试将它们全部转储到一个文件中。

也许你可以提供更多关于你到底在做什么的细节,但是从我能告诉你的情况来看,你为什么不制作一个不同的JS文件,其中包含每个页面所需的函数,而不是尝试将所有函数转储到一个文件中。

这取决于你的条件如何

如果它们都是相似的格式,你可以这样做

array = [
    ["page1", page1func],
    ["page2", page2func],
    ...
]

for(i=0; i<array.length; ++i)
{
    item = array[i];
    if(pageName == item[0]) $(document).ready(item[1]);
}
数组=[
[“第1页”,第1页],
[“第2页”,第2页],
...
]

对于(i=0;i,这取决于你的条件如何

如果它们都是相似的格式,你可以这样做

array = [
    ["page1", page1func],
    ["page2", page2func],
    ...
]

for(i=0; i<array.length; ++i)
{
    item = array[i];
    if(pageName == item[0]) $(document).ready(item[1]);
}
数组=[
[“第1页”,第1页],
[“第2页”,第2页],
...
]

对于(i=0;i如果所有函数都是这样的话,我会将它们保留在一个文件中。这将节省您的返工时间,并通过减少延迟成本和浏览器缓存节省用户时间。只是不要让该文件变得太大。调试和修改将变得可怕

如果将它们都保存在一个文件中,请在每个页面上添加一个脚本,以调用所需的脚本

function funcForPage1() {...}

function funcForPage2() {...}
然后,在第1页

$(funcForPage1);

等等。

如果所有函数都是这样的话,我会把它们放在一个文件中。这将节省您的返工时间,并通过减少延迟成本和浏览器缓存节省用户时间。只是不要让该文件变得太大。调试和修改将变得可怕

如果将它们都保存在一个文件中,请在每个页面上添加一个脚本,以调用所需的脚本

function funcForPage1() {...}

function funcForPage2() {...}
然后,在第1页

$(funcForPage1);
等等。

我最喜欢,但我可能会采用哈希表方法,假设“请求地址”是已知的固定值:

var request_addresses = {
    'request_address_1': requestAddress1Func,
    'request_address_2': requestAddress2Func
};

$(document).ready(request_addresses[the_request_address]);
当然,
request\u addresses
也可以是这样的:

var request_addresses = {
    'request_address_1': function () {
        /* $(document).ready() tasks for request_address_1 */
    },
    'request_address_2': function () {
        /* $(document).ready() tasks for request_address_2 */
    }
};
我最喜欢,但我可能采用哈希表方法,假设“请求地址”是已知的固定值:

var request_addresses = {
    'request_address_1': requestAddress1Func,
    'request_address_2': requestAddress2Func
};

$(document).ready(request_addresses[the_request_address]);
当然,
request\u addresses
也可以是这样的:

var request_addresses = {
    'request_address_1': function () {
        /* $(document).ready() tasks for request_address_1 */
    },
    'request_address_2': function () {
        /* $(document).ready() tasks for request_address_2 */
    }
};

在服务器上进行站点URL检查(如果可以的话)可能会更干净,并根据情况包括不同的.js文件,例如

**使用ASP.NETMVC

<html>
<head>
  <%
  if(Request.Url.Host == "domain.com")
  { %><script type="text/javascript" src="/somejsfile1.js"></script><% }
  else
  { %><script type="text/javascript" src="/somejsfile2.js"></script><% }
  %>
</head>
</html>


这样,每个js文件都将是独立的,而且您的HTML也不会包含它不需要的js行(即用于“其他”站点的代码)

在服务器上进行站点URL检查(如果可以的话)可能会更干净,并根据条件包括不同的.js文件,例如

**使用ASP.NETMVC

<html>
<head>
  <%
  if(Request.Url.Host == "domain.com")
  { %><script type="text/javascript" src="/somejsfile1.js"></script><% }
  else
  { %><script type="text/javascript" src="/somejsfile2.js"></script><% }
  %>
</head>
</html>


这样,每个JS文件将是独立的,而且HTML也不包含不需要的JS行(即用于“其他”站点的代码)

,而不是按照您的计划,考虑以逻辑的方式和组名称空间分组函数。 您将拥有一个对象,该对象包含包含函数的对象,并按如下方式调用:

serial = myApp.common.getSerialNumber(year,month);
model = myApp.common.getModelNumber(year);


如果你想隐藏每个页面的函数或函数,我想你可以在加载后用函数或组来清空它们。但是希望有组织的东西能满足你清理全局命名空间的愿望。

而不是做你正在计划的事情,考虑将函数以某种逻辑方式和命名空间分组。ups

您将拥有一个对象,该对象包含包含函数的对象,并按如下方式调用:

serial = myApp.common.getSerialNumber(year,month);
model = myApp.common.getModelNumber(year);


如果你想隐藏每页的一个或多个函数,我想你可以在加载后按函数或组将其清空。但希望有组织的东西能满足你清理全局命名空间的愿望。

我想不出一种特别优雅的方法来实现这一点,只使用JavaScript。如果这就是所有可用的方法对于您来说,我至少建议您使用switch语句或(最好)哈希表实现来引用您的函数

如果我必须这样做,考虑到我的开发环境完全在我的控制之下,我会将JavaScript分解成单独的文件,然后在确定请求后,我会使用服务器端代码构建定制的捆绑JavaScript文件并提供服务。您可以在服务器上创建这些文件的缓存副本并发送client端缓存头太多


您可能对本系列文章中的这项技术感兴趣。

我想不出一种特别优雅的方法来实现这一点,只使用JavaScript。如果您可以使用这些,那么我至少建议您使用switch语句或(最好)哈希表实现来引用您的函数

如果我必须这样做,考虑到我的开发环境完全在我的控制之下,我会将JavaScript分解成单独的文件,然后在确定请求后,我会使用服务器端代码构建定制的捆绑JavaScript文件并提供服务。您可以在服务器上创建这些文件的缓存副本并发送client端缓存头太多


您可能对本系列文章中介绍此技术的内容感兴趣。

您的意思是希望服务器上的不同页面可以看到不同的功能集吗?是的,我希望根据网站地址提供某些功能。我只是不相信有一长串if/else语句是正确的方法。您能告诉我吗您希望服务器上的不同页面可以看到不同的功能集吗?