0

我想创建一个DOM加载后全局可访问的对象。我的方法是使用原型dom:加载事件并实例化对象。JavaScript:从Prototype dom加载事件内部创建全局对象

的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 
} 


自己尝试一下:http://jsfiddle.net/vEGXH/2

回答

0

三件事,我看到:

  1. 您必须分配内单击处理"dom:loaded"处理程序,否则为ID为012的元素可能还不存在(实际上,这是显示在错误控制台Safari中的错误:

    TypeError: Result of expression 'myTrigger' [null] is not an object.

    )。使用return new construct()似乎过于复杂。

  2. 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

1)我定的是,在第二版小提琴 2)关闭应使VAR的私人,是不是你是如何做到的?见http://3.ly/G9PQ 3.)做到了这一招,谢谢! – nottinhill 2010-07-28 02:16:43

+0

@Stephan:啊,是的,它使变量保密。不知道这是这个意图;)我不知道是否有更好的做法。 – 2010-07-28 02:22:10

0

为什么不干脆把它放在窗口?

window.globalPAO = new picArrayObject();那么你可以使用它作为globalPAO上的任何地方你的脚本