Create global Object from inside Prototype dom loaded event
I want to create an object that is globally accessible after the DOM has loaded. My approach is to use prototypes dom:loaded event and instantiate the Object.
The JavaScript Code:
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');
func开发者_JS百科tion construct() {
this.picArray = [myPic1,myPic2,myPic3];
}
return new construct();
}
myTrigger.onClick = function () {
alert(globalPAO.picArray[0]); // alerts nothing
}
Try it yourself: http://jsfiddle.net/vEGXH/2
Three things that I see:
You have to assign the click handler inside the
"dom:loaded"
handler, otherwise the element with IDtrigger
might not yet exist (actually, this is the error that is shown in the error console in Safari:TypeError: Result of expression 'myTrigger' [null] is not an object.
).
Using
return new construct()
seems to be overly complicated.var globalPAO
creates a local variable. If you omitvar
you create a global one.
Improved example:
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];
}
Try it yourself: http://jsfiddle.net/vEGXH/4/
why not just put it in the window?
such as window.globalPAO = new picArrayObject();
then you can use it as globalPAO
anywhere on your script
精彩评论