在dojo的addOnLoad方法中创建实例没有全局作用域

Creating an instance in addOnLoad method of dojo doesn't have global scope

本文关键字:实例 全局 作用域 创建 dojo addOnLoad 方法      更新时间:2023-09-26

我在JavaScript中有一个Utils类。下面是该JavaScript的源代码。

function UtilityMethod(){
     this.testMethod=function(){
        alert("Test method is called");
    }
}

以上代码包含在Utils.js文件中。现在我需要在我的HTML文件中创建一个UtilityMethod的实例。我在HTML文件中引用了Utils.js。下面是我的HTML代码。

<html>
 <head>
  <title> New Document </title>
   <script type="text/javascript" src="/dojo/dojo.js"></script>
  <script type="text/javascript" src="/js/Utils.js"></script>
 </head>
 <body>
    <script type="text/javascript">
        dojo.addOnLoad(function(){
            var Utils = new UtilityMethod();
        });
    </script>
    <a href="javascript:void(0);" onclick="Utils.testMethod()">TestMethodCall</a>
 </body>
</html>

但是当我点击超链接时,它会给我错误Utils未定义。但是,即使我在页面加载后点击链接,为什么它仍然给出错误?我需要在dojo.addOnLoad()方法中包含实例创建。你能建议是否有其他简单的替代方法吗?

我知道我们可以使用dojo.connect()来做到这一点,但是是否有其他方法可以做到这一点?如果我们使用dojo。连接,我们必须更改大量的代码。

这是因为Utils是在函数中创建的;它在函数之外是不可用的。关于这种作用域行为的一个很好的解释可以在这里找到。要做到这一点,您需要告诉浏览器Utils是一个全局变量:

window.Utils = new UtilityMethod();

现在,在窗口对象上设置了Utils,从而使它可以在任何地方访问(窗口对象的一个很好的壮举是,它的属性在没有window.的情况下可用,因此您仍然可以正常使用Utils.testMethod)