0

Je souhaite créer un objet globalement accessible après le chargement du DOM. Mon approche consiste à utiliser des prototypes dom: événement chargé et à instancier l'objet.JavaScript: Création d'un objet global depuis l'intérieur de l'événement Prototype dom loaded

Le code 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 
} 


Essayez vous-même: http://jsfiddle.net/vEGXH/2

Répondre

0

Trois choses que je vois:

  1. Vous devez affecter le gestionnaire de clic à l'intérieur du "dom:loaded" gestionnaire, sinon l'élément avec ID trigger peut ne pas exister encore (en fait, c'est l'erreur qui apparaît dans la console d'erreur dans Safari:

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

    ).

  2. L'utilisation de return new construct() semble être trop compliquée.

  3. var globalPAO crée une variable locale. Si vous omettez var vous en créez un global.

exemple amélioré:

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]; 
} 

ESSAYEZ vous: http://jsfiddle.net/vEGXH/4/

+0

1.) Je fixe dans le violon ver.2 2.) la fermeture devrait privée, de la var est pas comment allez-vous? Voir http://3.ly/G9PQ 3.) qui a fait l'affaire, merci! – nottinhill

+0

@Stephan: Ah oui, cela rend les variables privées. Je ne savais pas que c'est l'intention;) Je ne sais pas s'il y a mieux à faire. –

0

pourquoi ne pas mettre juste dans la fenêtre?

tels que window.globalPAO = new picArrayObject(); alors vous pouvez l'utiliser comme globalPAO ne importe où sur votre script

Questions connexes