2011-07-12 3 views
0

J'ai travaillé sur ma propre bibliothèque javascript, kis-js. J'ai récemment converti à travailler avec des sélecteurs de dom comme jQuery, mais à cause de javascript copie uniquement des références que je cette question:Comment créer une instance unique d'un objet en javascript?

Si vous appelez $_ deux fois, la deuxième fois que vous l'appelez change le résultat du premier appel.

Test Code:

<h1>Heading</h1> 
<a>Anchor</a> 
<script> 
    var anchor = $_("a"); 
    var heading = $_("h1"); 
    console.log(anchor.el); // should be <a>, but it's <h1> 
</script> 

est ici la source à la bibliothèque: https://github.com/timw4mail/kis-js/blob/master/kis.js

Je pensais que je devais créer une copie en profondeur de l'objet constructeur, mais je ne suis pas tout à fait sûr de savoir comment pour y arriver.

Edit:

J'ai créé une fonction de copie profonde:

dcopy = function(obj) 
{ 
    var type, f; 

    if(obj == null) 
    { 
     return; 
    } 

    if(typeof Object.create !== "undefined") 
    { 
     return Object.create(obj); 
    } 

    var type = typeof obj; 

    if(type !== "object" && type !== "function") 
    { 
     return; 
    } 

    var f = function(){}; 

    f.prototype = obj; 

    return new f(); 

}; 

Comment puis-je utiliser cela pour que je peux prolonger mon objet construit?

+0

['jQuery.extend'] (http://api.jquery.com/jQuery.extend) peut copier des objets JavaScript superficiels ou profonds. –

+1

@Paolo Moretti Le but de la bibliothèque est de ne pas utiliser jQuery. – timw4mail

+0

@ timw4mail il peut vous apprendre. –

Répondre

0

Donc, je viens d'utiliser cette fonction.

dcopy = function(obj) { 
var type, f; 

if(obj == null) 
{ 
    return; 
} 

if(typeof Object.create !== "undefined") 
{ 
    return Object.create(obj); 
} 

var type = typeof obj; 

if(type !== "object" && type !== "function") 
{ 
    return; 
} 

var f = function(){}; 

f.prototype = obj; 

return new f(); 

}; 
2

Vous devriez retourner quelque chose new ... Aussi, évitez d'assigner et de retourner des variables globales.

+0

D'accord, mais où? La fonction de sélection? La fonction constructeur? tous les deux? – timw4mail

+0

'$ _ (...)' devrait retourner. –

+0

Si je n'attribue pas de variable globale, je n'aurai pas le moyen d'utiliser la bibliothèque. C'est la seule variable globale affectée. – timw4mail

Questions connexes