在dojo的addOnLoad方法中创建实例没有全局作用域
Creating an instance in addOnLoad method of dojo doesn't have global scope
我在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
)
相关文章:
- ES6构造函数返回基类的实例
- 全局变量和全局对象的属性之间有什么区别吗
- 正在全局范围中查找JavaScript函数
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- KnockoutJS-组件-多个实例
- 如何将getJson的响应保存在全局变量中
- 像cookie这样的全局变量,它在回发后保留值,但应该为不同的实例保存不同的值(选项卡/窗口)
- 在AngularJS中实例化全局服务
- 在测试时注入全局变量复制实际对象,需要相同的实例
- Javascript的最佳实践是全局使用一个模块实例
- 在dojo的addOnLoad方法中创建实例没有全局作用域
- 在XMLHttpRequest()的所有实例中全局添加X-CSRF-Token头
- 和全局实例
- 全局变量只返回循环中最后一个实例的值
- JavaScript中的全局实例
- 在Extjs中,需要一个全局组合框类来处理不同json数据的不同实例
- 如何使用 sinon.js 在 nodejs 中存根全局依赖项的新实例方法
- JavaScript 全局对象实例名称
- 主干模型,添加全局属性,该属性将存在于模型的每个实例上