2010-02-18 5 views
1

Cette question concerne le fonctionnement de javascript. Considérons 3 exemples pour illustration:Javascript Image objet sans instancier

function loadImgA() { 
    new Image().src="http://example.com/image.gif" 
} 

function loadImgA1() { 
    Image().src="http://example.com/image.gif" 
} 

function loadImgB() { 
    var testImg = new Image(); 
    testImg.src="http://example.com/image.gif" 
} 

Maintenant, le point est que je ne ai pas vraiment besoin de manipuler le l'objet d'image après sa création, d'où loadImgA(). La question est: que se passe-t-il si rien n'est assigné à la valeur de retour du nouveau constructeur Image() - dans ce cas, je peux sauter le mot-clé 'new' comme dans loadImgA1()? L'objet vit-il hors de la fonction ou affecte-t-il en quelque sorte l'utilisation de la mémoire? Autres implications, différences? Je ne pense pas, car aucune instance réelle n'a été créée?

Pour mettre ceci en perspective, j'ai seulement besoin de faire passer la requête http pour l'image. Aucune précharge ou autre manipulation d'image avancée. Quelle serait la méthode préférée de ce qui précède?

Répondre

1

L'utilisation de Image() sans le mot clé new génère une erreur. Dans vos exemples, loadImgA() et loadImgB() auront le même résultat final car rien n'est renvoyé par la fonction et aucune fermeture n'est créée pour utiliser la variable testImg.

En ce qui concerne l'utilisation de la mémoire, new Image() est un alias pour document.createElement("img"). Lorsqu'un élément DOM est créé dans la portée d'une fonction et non ajouté au document, lorsque toutes les fermetures sont terminées, l'élément doit être marqué pour la récupération de place et supprimé de la mémoire. Une instance est en fait créée, mais pas ajoutée au DOM, elle est donc détruite lorsqu'elle n'est plus utilisée.

Le seul vrai problème que j'ai pu constater à cause de cela est que lorsque l'objet image est détruit, toutes les requêtes http actuelles peuvent être détruites. Si tel est le cas, vous devrez peut-être utiliser le gestionnaire d'événements onload ou onerror pour nettoyer après le chargement de l'image ou en cas de problème.

+0

Merci Andy. Je pense que la même image() étant un raccourci pour document.createElement w3c ("img") mais il y a quelques suggestions pourquoi il ne peut pas être exact 1: 1: http://engineeredweb.com/blog/09/12/ performance-comparison-documentcreateelementimg-vs-nouvelle-image L'utilisation de Image() sans le nouveau mot-clé est en effet incorrecte. Le point sur les demandes http de destorying peut être valide bien que je n'ai pas pu confirmer. – user276027

+0

@ user276027: Merci pour le lien, c'était une lecture intéressante. –

Questions connexes