Objet Javascript obtenir le code comme une chaîne de caractères

Tout d'abord, je suis désolé si c'est un doublon, mais à chaque fois j'ai googlé pour 'objet' et 'code' j'ai eu tutoriel pages.

Je veux savoir si il existe un moyen facile pour obtenir le code associé à un objet. Quelque chose comme

function A(){
  this.name = 'Kaiser Sauze';
}
a = new A();
console.log(a.displayCode());
//OUTPUT
"function A(){ this.name = 'Kaiser Sauze';}"

Je veux être en mesure d'afficher le code, le modifier et le rechargement de la fonction, le tout dans le navigateur. Je voulais savoir si il y avait une certaine façon de le faire, ou si je dois amorcer la pompe en faisant quelque chose comme ceci:

function A(){
  this.name = 'Kaiser Sauze';
  this.code = "function A(){ this.name = 'Kaiser Sauze';}"
}

puis, à chaque fois, l'utilisateur télécharge l'éditeur de texte pour afficher this.code - je connecter le onchange de mettre à jour this.code.

MODIFIER

s'avère yankee a suggéré une solution simple à ce

function A(x){
  this.x = x ;
}
console.log(A.toString());
//OUTPUT
"function A(x){
  this.x = x ;
}"

mais dans ma mise en œuvre de la variable 'x' peut être une fonction (en fait un complexe d'objets avec des variables, des fonctions et des sous-objets que je mélange à l'aide d'un appel à l'dojo.mixin), donc ce que je veux vraiment, c'est de connaître le code lorsqu'il est instancié, quelque chose comme ça

function A(x){
  this.x = x ;
}
var a = new A(function(){/*DO SOMETHING*/);
console.log(a.toString());
//OUTPUT
"var a = new A(function(){/*DO SOMETHING*/);"

mais, comme la plupart d'entre vous le savez déjà, tout ce qui est sortie est quelque chose comme "Objet". J'ai presque trouvé un moyen de contourner cela, en mettant l'initialisation en fonction de la façon

function A(x){
  this.x = x ;
}
function _A(){
  var a = new A(function(){/*DO SOMETHING*/);
}
console.log(_A.toString());
//OUTPUT
"function _A(){
  var a = new A(function(){/*DO SOMETHING*/);
}"

mais qui prête à confusion, et puis, je dois y aller et de commencer l'analyse de la chaîne dont je ne veux pas faire.

EDIT: La raison pour laquelle je vous demande à tous de ce est b/c je veux faire un code qui est à la fois de façon dynamique exécutable et très modulaire. Je fais affaire avec la toile. Je veux que l'utilisateur puisse cliquer sur un, par exemple, un rectangle, d'afficher son code, et de le modifier puis de charger/exécuter. J'ai une série de règles, mais, fondamentalement, j'ai une classe de forme et de tout ce qui définit cette forme (couleur, transparence, les remplissages, contours...) a pour obtenir transmis en tant que paramètre à l'objet cosntructor, quelque chose comme:

rect = new Shape({color : 'rgba(0,0,0,1)' , 
  x : 0 , 
  y : 0 , 
  w : 100 , 
  h : 100 ,
  draw : function() {ctx.fillStyle = this.color;
    ctx.fillRect(this.x,this.y,this.w,this.h);
  }
});

De cette façon, le code est automatiquement modulaire, je n'ai pas à vous soucier de la couleur définie en haut de la page, puis la hauteur étant défini à moitié chemin en bas de la page, et ainsi de suite. Maintenant, la seule chose dont j'ai besoin est d'une certaine manière, passer comme paramètre, l'ensemble au-dessus de la chaîne de la représentation de l'initialisation. Je pourrais l'insérer dans une fonction et l'appel de toString sur ça, comme

function wrapper(){
  rect = new Shape({color : 'rgba(0,0,0,1)' , 
        x : 0 , 
        y : 0 , 
        w : 100 , 
        h : 100 ,
        draw : function() {ctx.fillStyle = this.color;
          ctx.fillRect(this.x,this.y,this.w,this.h);
        },
        code : wrapper.toString()
      });
  }

mais alors il y a deux problèmes. 1) j'ai pour supprimer manuellement les function wrapper() et de fuite } ainsi que le déplacement de chaque ligne à gauche par un onglet. 2) il n'y a aucune garantie que l'utilisateur n'oubliez pas d'inclure la fonction wrapper car il est totalement inutile pour les fins de l'établissement. Je suis en train de réfléchir à un moyen où le wrapper semble naturel, mais je ne peux pas penser à tout. Mais encore une fois je n'ai pas dormi dans plus de 30 heures.

+1 juste pour le référencement de Kaiser Sauze... bien que je pense qu'il est orthographié de Keyser Söze 😉
Je ne me souviens jamais comment l'écrire, donc quand je donne mon numéro pour les dames, je vais par Rolo Tomasi 😉

OriginalL'auteur puk | 2011-07-05