【问题标题】:How to limit scope of a function in javascript/ jquery [duplicate]如何限制javascript / jquery中函数的范围[重复]
【发布时间】:2016-02-26 11:35:22
【问题描述】:

我在页面上链接了多个 .js 文件,这些文件具有同名的功能,例如以下样机

first.js

function DisplayContent(data,$target) // data is string
{
     $target.html('<span>'+ data +'</span>')
}

second.js

function DisplayContent(data,$target) // data is string
{
     $target.html('<div>'+ data +'</div>')
}

以上两个文件都引用了页面。

如何在不重命名函数的情况下解决上述问题。

如果方法有误请指正。

谢谢

【问题讨论】:

  • 你为什么不把它保存在一个js中,然后再确定一个参数。?
  • 听说过揭示模块模式吗?
  • @Guruprasad 我可以做到,但我不想重复代码。由于每个js文件都有自己的功能,问题是我需要同时引用两个js。
  • 这些功能分别在哪里使用?仅在写入它们的文件中?
  • @Mayank 你在同一个文件或其他地方调用这些函数??

标签: javascript jquery scope


【解决方案1】:

您可以在 JavaScript 文件中使用命名空间:

first.js:

var first= {
  DisplayContent: function DisplayContent(data,$target) 
  {
     $target.html('<span>'+ data +'</span>')
  },
     [additional methods in the first object]
};

second.js

var second= {
  displayContent: function DisplayContent(data,$target) 
  {
      $target.html('<div>'+ data +'</div>')
  },
  [additional methods for the second implementation]
};

然后调用Namespace.method之类的方法,即first.DisplayContent()

【讨论】:

    【解决方案2】:

    我猜会更好

    function DisplayContent(data,$target,htmltag) // data is string
    {
         $target.html('<' + htmltag + '>' + data + '</' + htmltag + '>')
    }
    

    【讨论】:

      【解决方案3】:

      如果您仅在该文件本身中调用这些函数,那么您可以像这样限制范围:

      First.js

      (
        function(){
          function DisplayContent(data,$target) // data is string
          {
               //$target.html('<span>'+ data +'</span>')
               alert("first file");
          }
      
          DisplayContent('test','test');
      
          //here you can place other code
      }());
      

      Second.js

      (
        function(){
          function DisplayContent(data,$target) // data is string
          {
               //$target.html('<div>'+ data +'</div>')
               alert("Second file");
          }
      
          DisplayContent('test','test');
      
          //here you can place other code
        }()
      );
      

      See a demo

      【讨论】:

        【解决方案4】:

        多种方式。

        1. 如果您不希望它们发生冲突,您可以在您的 second.js 中执行此操作。这将允许您在页面中独立使用 second.js,并且此函数会触发。

           if(typeof DisplayContent !=='function'){
              function  DisplayContent(){
          
            }
           }
          
        2. 你可以像 Manwal 正确指出的那样去关闭。

        但是,拥有两个同名的函数并没有多大意义。你应该避免这种情况。

        【讨论】:

          【解决方案5】:

          如果您将两个 JS 文件添加到单个页面,这两个文件将在单个 javascript 上下文中运行,并且函数将被替换,从而导致结果不可接受。因此,制作不可能满足您的要求。

          【讨论】:

            猜你喜欢
            • 2012-08-02
            • 1970-01-01
            • 2015-12-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-04-19
            • 2017-05-22
            相关资源
            最近更新 更多