【问题标题】:JavaScript: function with switch/case vs. overwriting the functionJavaScript:带有开关/大小写的函数与覆盖函数
【发布时间】:2011-01-28 05:59:23
【问题描述】:

我有一个函数可以根据浏览器的大小更新元素大小:

window.onresize = function() { setContentHeight(); }

但是,既然我已经使用 AJAX 来交换主题(更改正文的 innerHTML),此功能需要更改。新主题不仅有新的图像,还有完全不同的布局。因此,旧的 onresize 函数只会弄乱页面。我想了两种方法来解决这个问题:

方法 1) 将参数传递给稍作修改的函数setContentHeight(themeSelection);,其中该参数用于 switch/case 语句。优点:主题交换只会更改传递的变量的值。缺点:setContentHeight(themeSelection); 将包含所有主题的代码,并且比需要的更长。

方法 2) 通过评估从 XMLHTTPRequest 解析的一些脚本代码来覆盖函数。但是,我不知道如何让 JS 修改现有功能或简单地删除它并启动一个新功能。优点:该功能仍然很短 缺点:我不知道该怎么做。

你会做什么,或者你会完全做其他事情?如果您的答案是方法 2,那么您能否提供有关如何完成的链接?当然,我自己完成大部分工作没有问题,但如果它是首选方法,我可以使用一些建议和方法 #2 的示例。

【问题讨论】:

    标签: javascript ajax themes switch-statement overwrite


    【解决方案1】:

    如果您要更改正文的innerHTML,您不能也添加/删除一个类吗?或者,更好的是,更改一个全局变量:

    var current_theme = 'some_theme';
    
    function loading_new_theme() {
        ...
        current_theme = 'new_theme';
    }
    

    然后您可以让setContentHeight 根据该全局变量分配高度。

    (另外:如果你不打算将任何参数传递给setContentHeight,你可以这样做:

    window.onresize = setContentHeight;
    

    )

    【讨论】:

    • 我可以添加/删除一个类,但我认为这不会阻止 setContentHeight() 函数弄乱对象的尺寸。我想,由于 themeSelection 是一个全局变量,你说我不必将它作为参数传递是正确的,但是,方法 #1 与 #2 的问题仍然存在。不过,除非有人说服我,否则我将把它实现为 switch/case。我只是想我会问一下,以防万一 SO 专家有更好的主意。 :)
    • 并不是说这解决了最初的问题,但我找到了一种改变我的皮肤的好方法,它不涉及重新上传整个身体或使用 javascript 来更改类:javascriptkit.com/javatutors/loadjavascriptcss2.shtml。我所要做的就是为每个皮肤设置一个 CSS,然后交换 CSS 文件。
    • @Michael 如果这就是你要做的,你应该自己回答这个问题并接受它。
    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2014-06-09
    相关资源
    最近更新 更多