En primer lugar, siento que sea un duplicado, pero cada vez que busqué en Google 'objeto' y 'código' obtuve las páginas de tutoriales.Objeto Javascript Obtiene código como cadena
Quiero saber si hay alguna manera fácil de obtener el código asociado a un objeto. Algo así como
function A(){
this.name = 'Kaiser Sauze';
}
a = new A();
console.log(a.displayCode());
//OUTPUT
"function A(){ this.name = 'Kaiser Sauze';}"
Quiero poder ver el código, modificarlo y volver a cargar la función, todo desde el navegador. Yo quería saber si había alguna manera de hacer esto, o si tengo que cebar la bomba haciendo algo como esto:
function A(){
this.name = 'Kaiser Sauze';
this.code = "function A(){ this.name = 'Kaiser Sauze';}"
}
continuación, cada vez que el usuario carga el editor de texto para ver this.code
que conecte el onchange para actualizar this.code
.
EDITAR
resulta yanqui sugirió una solución simple a este
function A(x){
this.x = x ;
}
console.log(A.toString());
//OUTPUT
"function A(x){
this.x = x ;
}"
pero en mi aplicación la variable 'x' puede ser una función (en realidad un objeto complicado con variables, funciones y objetos sub el cual mezclo en medio de una llamada a dojo.mixin), por lo que lo que realmente quiero es conocer el código cuando se crea una instancia, algo así como lo que
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*/);"
pero, como la mayoría de ustedes ya saben, todo lo que obtiene es algo así como "Objeto". Casi he encontrado una forma de evitar esto, poniendo la inicialización en una función como tal
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*/);
}"
pero eso es confuso, y luego tengo que entrar y empezar a analizar la cadena, que no quiero hacer.
EDITAR: La razón por la que pregunto todo esto es por b/c. Quiero hacer código que sea dinámicamente ejecutable y altamente modular. Estoy lidiando con el lienzo. Quiero que el usuario pueda hacer clic en, por ejemplo, un rectángulo, ver su código y modificarlo y luego cargarlo/ejecutarlo. Tengo una serie de reglas, pero básicamente tengo una clase de forma y todo lo que define esa forma (color, transparencia, rellenos, trazos ...) debe pasarse como un parámetro al objeto cosntructor, algo así como:
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 esta forma el código es automáticamente modular, no tengo que preocuparme por el color que se define en la parte superior de la página, y luego por la altura que se define en la mitad de la página, y así sucesivamente. Ahora, lo único que necesito es, de alguna manera, pasar como parámetro, toda la representación de cadena anterior de la inicialización. Podría envolverlo en una función y llamar a String en eso, como
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()
});
}
, pero entonces hay dos problemas. 1) Tengo que eliminar manualmente function wrapper()
y posterior }
, así como mover cada línea a la izquierda en una pestaña. 2) no hay garantía de que un usuario recuerde incluir la función de envoltura, ya que es totalmente innecesario para fines de dibujo. Estoy tratando de pensar en una forma en que la envoltura parezca natural, pero no puedo pensar en ninguna. Pero, de nuevo, no he dormido en más de 30 horas.
+1 solo para hacer referencia a Kaiser Sauze ...aunque creo que está deletreado Keyser Söze ;-) –
@Jason: Nunca recuerdo cómo se deletrea, así que cuando les doy mi número a las chicas, voy por Rolo Tomasi ;-) – puk