提问人:Stephan Kristyn 提问时间:7/28/2010 最后编辑:Brian Tompsett - 汤莱恩Stephan Kristyn 更新时间:7/21/2019 访问量:993
从原型 dom 加载事件内部创建全局对象
Create global Object from inside Prototype dom loaded event
问:
我想创建一个在 DOM 加载后可全局访问的对象。我的方法是使用原型dom:loaded事件并实例化对象。
JavaScript 代码:
document.observe("dom:loaded", function() {
var globalPAO = new picArrayObject();
alert(globalPAO.picArray[0]); // alerts [object HTMLDivElement]
});
var picArrayObject = function () {
var myPic1 = document.getElementById('pic1');
var myPic2 = document.getElementById('pic2');
var myPic3 = document.getElementById('pic3');
function construct() {
this.picArray = [myPic1,myPic2,myPic3];
}
return new construct();
}
myTrigger.onClick = function () {
alert(globalPAO.picArray[0]); // alerts nothing
}
答:
0赞
Felix Kling
7/28/2010
#1
我看到的三件事:
您必须在处理程序中分配单击处理程序,否则具有 ID 的元素可能尚不存在(实际上,这是 Safari 错误控制台中显示的错误:
"dom:loaded"
trigger
TypeError:表达式“myTrigger”[null] 的结果不是对象。
).
使用似乎过于复杂。
return new construct()
var globalPAO
创建一个局部变量。如果省略,则创建一个全局的。var
改进的示例:
document.observe("dom:loaded", function() {
globalPAO = new picArrayObject();
alert(globalPAO.picArray[0]); // alerts [object HTMLDivElement]
var myTrigger = document.getElementById('trigger');
myTrigger.onclick = function () {
alert(globalPAO.picArray[0]); // alerts object HTMLDivElement]
}
});
var picArrayObject = function () {
var myPic1 = document.getElementById('pic1');
var myPic2 = document.getElementById('pic2');
var myPic3 = document.getElementById('pic3');
this.picArray = [myPic1,myPic2,myPic3];
}
亲自试一试:http://jsfiddle.net/vEGXH/4/
评论
0赞
Stephan Kristyn
7/28/2010
1.) 我在 ver.2 小提琴 2 中修复了它。关闭应该使 VAR 成为私有的,你不是这样做的吗?见 3.ly/G9PQ 3。这成功了,谢谢!
0赞
Felix Kling
7/28/2010
@Stephan:是的,它使变量私有化。不知道这是意图;)我不知道有没有更好的办法。
0赞
Serkan Yersen
7/30/2010
#2
为什么不把它放在窗户里呢?
例如,您可以将其用作脚本中的任何位置window.globalPAO = new picArrayObject();
globalPAO
评论