2009-06-25 6 views
3

Mon but est de créer une sorte de "bibliothèque Javascript", si vous pouvez l'appeler ainsi. J'ai l'intention de l'utiliser pour simplement manipuler des pages pendant que je navigue sur le Web, en le chargeant dynamiquement comme un script greasemonkey. L'idée est d'avoir "win" être mappé à window, "doc" ->document, "win.loc" ->win.location, et quelques autres mappings de commodité, mais vous avez l'idée. Pouvez-vous me donner quelques exemples pour moi, et je vais extrapoler le reste? Merci beaucoup.Alias ​​Javascript

Répondre

11

Juste assigner des variables comme ceci:

var win = window; 
var doc = document; 

Vous ne pouvez pas affecter win.loc sans modifier l'objet window dans ce cas cependant. En outre, l'objet de la fenêtre est spéciale car après l'attribution win, vous serez en mesure d'obtenir avec win.win ou win.win.win et ainsi de suite (window est l'objet global.)

Dans tous les cas, vous pouvez d'affecter encore loc à l'objet window:

win.loc = window.location; 

// Can now be referenced as: 
loc; // (window is the global object) 
win.loc; 
win.location; 
window.location; 

maintenant, c'est comment faire ce que vous demandez. Probablement vous ne devrait pas le faire. En règle générale, les cadres sont définis pour utiliser jusqu'à une seule variable globale, avec un nom approprié:

var Blixt = (function() { 
    var localVariable = 123; 

    return { 
     loc: window.location, 
     myFunc: function() { 
      alert(localVariable); 
     } 
    }; 
})(); 

Tout cela est une chose assez complexe si vous n'êtes pas familier avec JavaScript, donc ce n'est pas un bon projet pour commencer Si vous êtes nouveau sur JavaScript

+0

@Blixt Veuillez consulter [ma propre réponse] (http: // stackoverflow.com/questions/1045889/javascript-aliases/1046094 # 1046094) à cette question ci-dessous, comme ce que je voudrais vous poser à votre sujet est trop long pour un commentaire. :) Merci! – Joe

0

** NOTE: ** Ceci est vraiment une demande de clarification de la réponse de Blixt ci-dessus, qui ne rentre pas dans un commentaire.

Ok, merci - c'est une très bonne réponse. Je voudrais simplement apporter quelques précisions à ce:

  • Si je définir les alias à l'aide de la syntaxe que vous avez donné ci-dessus, win.loc se comportera exactement les mêmes que window.location sans exception? (Juste s'assurer)

  • J'ai suivi la plupart de celui-ci, mais la partie avec la fonction Blixt je ne comprenais pas. Quel est le comportement/résultat attendu de la définition de cette fonction?

  • Je suis un peu nouvelle à JS, mais pourquoi est-ce pas une bonne idée? Quelles conséquences négatives pourrait-il avoir? Je cherche juste à faire des choses comme C-l javascript:win.loc=doc.ref<ENTER> pour un onglet qui a été ouvert par CTRL en cliquant sur un lien dans un autre onglet, rien de trop complexe.

  • parlant de ça, et j'ai le sentiment que cela pourrait être différent du navigateur à l'autre, mais est-il un moyen possible pour moi de définir un schéma d'URI js: et la carte à la javascript: un? Merci pour la bonne réponse.

+1

(1) Oui, c'est une référence à exactement le même objet. (2) Blixt n'est pas une fonction; c'est un objet retourné par la fonction anonyme (notez que la fonction est appelée et Blixt est assignée au résultat.) C'est une technique appelée "fermetures" qui signifie que les variables définies dans la fonction y sont conservées plutôt que définies dans l'espace de noms global . (3) Si vous gardez seulement ce script pour vous, cela n'a pas d'importance. Mais lorsque vous mélangez des frameworks, vous voulez éviter d'affecter autant que possible les autres frameworks. (4) Non, pas possible j'ai peur. – Blixt

+0

Merci encore une fois pour cette merveilleuse réponse :) – Joe