tutorial page into injection how executed change attack javascript object this

javascript - page - "This" inside object



javascript injection attack (5)

Cuando utiliza esto en una declaración de objeto JSON, apunta a la instancia actual.

Puede probar este código en su consola para entenderlo mejor:

Object({ w : 560, h : (312 - 42) / (560 / function(e){console.log(e);return e.w;}(this)) + 42 });

Esta pregunta ya tiene una respuesta aquí:

Estoy tratando de calcular una altura proporcional (excluyendo un elemento de altura estática) de un ancho que se transfiere a través de una solicitud (por defecto es 560).

Sin embargo, wF.h evalúa a NaN . Si reemplazo this.w por 560, funciona, pero no cuando trato de hacer referencia a la propiedad w de wF .

var wF = { w : 560, h : (312 - 42) / (560 / this.w) + 42 };

¿Lo que da?

Me rehúso a usar dos vars simples en sucesión, porque estoy tratando de obtener un buen código de JS.

Actualizar:

Gracias a todos los que me ayudaron a explicar y resolver mi problema. Supongo que tendré que acostumbrarme a eso. Voy a configurar el objeto en etapas para continuar con el proyecto, a pesar de que todavía me molesta un poco;). Encontré y leí un buen artículo sobre el tema para cualquier persona que se tope con problemas similares: http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/


Hola, redefino tu segunda propiedad como un objeto de función y funcionará. Creo que es posible acceder al contexto del objeto que llama desde dentro de una función

var wF = { w : 560, h : function() { return (312 - 42) / (560 / this.w) + 42; } }; alert(wF.h())


La palabra clave this refiere al contexto de llamada, no a un objeto.

Necesitas hacer esto en dos pasos como ese:

var wF = { w: 560 }; wF.h = (312 - 42) / (560 / wF.w) + 42;


No necesita envolver el {...} en un objeto (). Ya es un objeto literal.

this no opera dentro del objeto literal, apuntará al objeto en el que se está ejecutando actualmente la función así:

function fn() { var wF = { w : 560, h : (312 - 42) / (560 / this.w) + 42 }; } fn();

hará que this apunte al objeto window .

EDITAR: El código anterior no fue una respuesta, solo una demostración de lo que es this . Otra posibilidad sería usar una función que tome el ancho como argumento:

function getObject(width) { width = width || 560; //Default value to 560 return { w: width, h : (312 - 42) / (560 / width) + 42 }; } var wF = getObject(); //To get the default value, or specify a width otherwise.


// Your code var wF = { w : 560, h : (312 - 42) / (560 / this.w) + 42 };

this no es lo que crees que es

Javascript no tiene ámbito de bloque, solo alcance de función: this dentro de la definición de wF no se refiere a wF .

(Y entonces esto this.w , sea this sea, probablemente undefined esté undefined . Dividir por rendimientos undefined NaN .)

Entonces, puede intentar:

// Let''s not use `this` var wF = { w : 560, h : (312 - 42) / (560 / wF.w) + 42 };

Aún no has terminado de definir el objeto

Sin embargo, todavía está definiendo el objeto donde intenta usar wF.w : todavía no está listo para eso .

Solución

Entonces, sí, tendrá que usar dos variables ... o configurar el objeto por etapas:

// We can''t even use `wF`; split up the property definitions var wF = {}; wF.w = 560; wF.h = (312 - 42) / (560 / wF.w) + 42;