2010-10-10 2 views
0

Ok Je ne suis pas sûr que le titre de ce post est la bonne façon de se référer à ce que je veux dire et je suis sûr que je connais déjà la réponse à cette question, mais je voulais juste une clarification.Comment le dom est-il mis en cache entre les fonctions dans un littéral d'objet? (Javascript)

Si j'ai un ojet comme celui-ci

var myObj = { 
    settings : { 
    domObj = document.getElementById('elem1'); 
    }, 
    myFunc1 : function() { 
    return this.domObj; 
    }, 
    myFunc2 : function() { 
    return this.domObj; 
    } 
} 

myObj.myFunc1(); 
myObj.myFunc2(); 

Le domObj mis en mémoire cache la première fois qu'il est accessible ou est le dom traversé dans les deux fonctions? Je tente d'accéder au Dom une seule fois, mais je ne sais pas si c'est une solution possible.

+0

Oui, en faisant cela, l'objet est mis en cache et traversé une seule fois. –

+1

Je pense que vous devez apprendre la différence entre les objets et les funtions. myFunc1 et myFunc2 dans votre exemple ne sont pas des fonctions et ne "retourneront" rien. – Robusto

+1

Ce code est syntaxiquement incorrect. Avez-vous oublié 'function()' après le deux-points? – Pointy

Répondre

1

En supposant que vous vouliez dire vraiment ceci:

var myObj = { 
    settings : function() { 
    domObj = document.getElementById('elem1'); 
    }, 
    myFunc1 : function() { 
    return this.domObj; 
    }, 
    myFunc2 : function() { 
    return this.domObj; 
    } 
}; 

la réponse est que « domObj » est une variable globale parce que vous avez oublié le mot-clé var. Maintenant, vous avez peut-être signifié ceci:

var myObj = { 
    domObj: null, 
    settings : function() { 
    this.domObj = document.getElementById('elem1'); 
    }, 
    myFunc1 : function() { 
    return this.domObj; 
    }, 
    myFunc2 : function() { 
    return this.domObj; 
    } 
}; 

auquel cas « domObj » est juste une propriété de « myObj ». Il serait réglé si vous appelez

myObj.settings(); 
1

En supposant que vous faites "this.domObj =" et les autres corrections que vous avez notées; Oui; l'élément DOM est mis en cache dans this.domObj. La seule fois que le DOM est traversé est lorsque vous appelez les méthodes de traversée DOM. L'affectation d'un élément DOM à une propriété de variable/objet fonctionne exactement de la même manière que toute autre affectation.

Questions connexes