Javascript Singleton设计模式和闭包
Javascript Singleton design pattern and closure
我正在尝试创建一个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.ini()时,document元素将不会被分配给html_element,因此我无法附加侦听器。奇怪的是,row_number变量被初始化为零。是否存在某种我不理解的范围界定冲突?当我使用opera的dragonfly的step into功能时,在init()函数中无法创建var赋值。
执行脚本时,请确保页面上有id为"quoteNum"的元素
您可能在执行脚本时没有等待所有页面元素的呈现。
你可以考虑处理window.onload.
更新
以下更改可以帮助您解决在呈现页面之前初始化htmlElement的问题。
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!");
}
}
})();
在DOM中存在id为quoteNum
的元素后执行的上述代码吗?
如果不是,则html_element
将是null
。
因此,请确保以上所有代码都在一个脚本标记中,该标记出现在元素下方文档中的某个位置(或window.onload
jQuery的文档就绪类型事件中)。
相关文章:
- 在underscorejs模板中使用闭包
- setTimeout可以与闭包内的函数一起使用吗
- Node.js设计:多个异步函数使用作为闭包传递的函数写入数据库
- 如何在严格模式下实现以下JavaScript闭包
- process.on('uncaughtException')的令人困惑的事件发射器/闭包模式
- 是否可以避免使用getter和setter的模式,并且仍然使用闭包ADVANCED_OPTIMIZATIONS最小化Ja
- Google闭包在高级模式下调用未定义的函数
- 此模式是否会导致闭包中出现循环引用
- Javascript Singleton设计模式和闭包
- 具有闭包和性能的JS模式
- 对这种JavaScript闭包模式感到困惑
- 模块模式和闭包
- Javascript模块模式和Google闭包编译器
- 模块模式'匿名闭包
- 我可以使用暴露模块模式对闭包中的变量使用getter/setter吗
- 谷歌闭包编译器和UMD模式
- JavaScript中的闭包内存泄漏模式
- 在闭包中使用原型模式
- 是Google API javascript客户端兼容的闭包高级模式编译
- Javascript词法分析器是如何解析的?(没有父元素的闭包模式)