objetos - metodos en javascript
Objeto de JavaScript: acceda a la propiedad de la variable por su nombre como cadena (3)
Desde que me ayudaron con mi proyecto con la respuesta anterior (hice una pregunta duplicada y me remitieron aquí), estoy enviando una respuesta (mi código de prueba) para la notación de corchetes cuando anidado dentro de la var:
<html>
<head>
<script type="text/javascript">
function displayFile(whatOption, whatColor) {
var Test01 = {
rectangle: {
red: "RectangleRedFile",
blue: "RectangleBlueFile"
},
square: {
red: "SquareRedFile",
blue: "SquareBlueFile"
}
};
var filename = Test01[whatOption][whatColor];
alert(filename);
}
</script>
</head>
<body>
<p onclick="displayFile(''rectangle'', ''red'')">[ Rec Red ]</p>
<br/>
<p onclick="displayFile(''square'', ''blue'')">[ Sq Blue ]</p>
<br/>
<p onclick="displayFile(''square'', ''red'')">[ Sq Red ]</p>
</body>
</html>
Esta pregunta ya tiene una respuesta aquí:
- Acceder dinámicamente a la propiedad del objeto utilizando las respuestas de la variable 11.
Si tengo un objeto javascript que se ve a continuación
var columns = {
left: true,
center : false,
right : false
}
y tengo una función que se pasa tanto el objeto como un nombre de propiedad así
//should return false
var side = read_prop(columns, ''right'');
¿Cómo sería el cuerpo de read_prop(object, property)
?
La respuesta de ThiefMaster es 100% correcta, aunque encontré un problema similar en el que necesitaba recuperar una propiedad de un objeto anidado (objeto dentro de un objeto), así que como alternativa a su respuesta, puede crear una solución recursiva que le permita para definir una nomenclatura para tomar cualquier propiedad, independientemente de la profundidad:
function fetchFromObject(obj, prop) {
if(typeof obj === ''undefined'') {
return false;
}
var _index = prop.indexOf(''.'')
if(_index > -1) {
return fetchFromObject(obj[prop.substring(0, _index)], prop.substr(_index + 1));
}
return obj[prop];
}
Donde su cadena de referencia a una propiedad dada resuelve property1.property2
Código y comentarios en JsFiddle .
No necesita una función para ello, simplemente use la notación de corchete :
var side = columns[''right''];
Esto es igual a la notación de puntos , var side = columns.right;
, excepto el hecho de que el right
también puede provenir de una variable, valor de retorno de función, etc., cuando se usa la notación de corchete.
Si NECESITA una función para ello, aquí está:
function read_prop(obj, prop) {
return obj[prop];
}