0

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

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

4

2 回答 2

0

我看到的三件事:

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

    TypeError:表达式“myTrigger”[null] 的结果不是对象。

    )。

  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/

于 2010-07-28T02:05:28.973 回答
0

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

比如你可以在脚本的任何地方window.globalPAO = new picArrayObject();使用它globalPAO

于 2010-07-30T15:05:47.657 回答