代码之家  ›  专栏  ›  技术社区  ›  Stephan Kristyn

javascript:从原型dom加载事件内部创建全局对象

  •  0
  • Stephan Kristyn  · 技术社区  · 14 年前

    我想创建一个在加载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
    }
    


    自己试试: http://jsfiddle.net/vEGXH/2

    2 回复  |  直到 13 年前
        1
  •  0
  •   Felix Kling    14 年前

    我看到三件事:

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

      类型错误:表达式“MyTrigger”[空]的结果不是对象。

      )

    2. 使用 return new construct() 似乎太复杂了。

    3. 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/

        2
  •  0
  •   Serkan Yersen    14 年前

    为什么不把它放在窗户里?

    window.globalPAO = new picArrayObject(); 然后你可以把它当作 globalPAO 你剧本上的任何地方

    推荐文章