JavaScript: создание глобального объекта изнутри события Prototype dom - PullRequest
0 голосов
/ 28 июля 2010

Я хочу создать объект, который будет глобально доступен после загрузки DOM.Мой подход заключается в использовании прототипов 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

Ответы [ 2 ]

0 голосов
/ 30 июля 2010

почему бы просто не положить его в окно?

, например window.globalPAO = new picArrayObject();, тогда вы можете использовать его как globalPAO в любом месте вашего скрипта

0 голосов
/ 28 июля 2010

Три вещи, которые я вижу:

  1. Вы должны назначить обработчик щелчка внутри обработчика "dom:loaded", в противном случае элемент с идентификатором 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/

...