Javascript Singleton 设计模式和闭包

标签 javascript

我正在尝试创建一个处理事件监听器服务的 Singleton 对象:

var ChildParent = (function () {
   var html_element = document.getElementById("quoteNum");
   var row_number = 0;

   return {
       init: function(){
           html_element["parenttype"+row_number].addEventListener("click", ChildParent.fire, false);
       },
       add: function(total) { //Adding a row

       },
       fire: function() {
           alert("it fired!");
       }
   } 
})();

但是,当我调用 ChildParent.init() 时,文档元素不会分配给 html_element,因此我无法附加监听器。奇怪的是,row_number 变量被初始化为零。是否存在某种我不理解的范围冲突?当我使用 Opera 的 Dragonfly 的 step-into 功能时,我无法在 init() 函数中创建 var 赋值。

最佳答案

确保在执行脚本时页面上有 id 为“quoteNum”的元素。
您可能会在没有等待呈现所有页面元素的情况下执行脚本。

您可能会考虑处理 window.onload .

更新

以下更改可以帮助您解决在呈现页面之前初始化 html_element 的问题。

var ChildParent = (function () {
   function getElement(){
       return html_element ? html_element : html_element = document.getElementById("quoteNum");
   }

   var html_element;
   var row_number = 0;

   return {
       init: function(){
           getElement()["parenttype"+row_number].addEventListener("click", ChildParent.fire, false);
       },
       add: function(total) { //Adding a row

       },
       fire: function() {
           alert("it fired!");
       }
   } 
})();

关于Javascript Singleton 设计模式和闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9437930/

相关文章:

javascript - 如何重构我的 React 组件以接受一组错误,并在 error.show = true 对于其中任何一个错误时显示错误消息

javascript - 如何捕获JavaScript错误?

javascript - 如何通过 JQuery ajaxSend 事件覆盖成功函数

javascript - 如何将 `$(this)` 传递给 Slick.js 插件(并使用循环创建多个轮播)

javascript - 如何通过javascript访问选中的单选框的值

javascript - 在Selenium中,如何在登录网站时处理InvalidSelectorException

javascript - 当我从 Pen 将它复制到 PHPStorm 时,为什么这个文本动画代码不起作用?

javascript - 将 promise 值返回给 angular.extend() 中的变量

javascript - 调整浏览器大小时,光滑的 slider 内容不会弹回

Javascript 正则表达式在数学方程式中查找变量