recorrer - Definición de propiedades de solo lectura en JavaScript
recorrer array de objetos javascript (3)
Debido a los navegadores antiguos (compatibilidad con versiones anteriores) tuve que buscar funciones de acceso para las propiedades. Lo hice parte de bob.js :
var obj = { };
//declare read-only property.
bob.prop.namedProp(obj, ''name'', ''Bob'', true);
//declare read-write property.
bob.prop.namedProp(obj, ''age'', 1);
//get values of properties.
console.log(bob.string.formatString(''{0} is {1} years old.'', obj.get_name(), obj.get_age()));
//set value of read-write property.
obj.set_age(2);
console.log(bob.string.formatString(''Now {0} is {1} years old.'', obj.get_name(), obj.get_age()));
//cannot set read-only property of obj. Next line would throw an error.
// obj.set_name(''Rob'');
//Output:
//========
// Bob is 1 years old.
// Now Bob is 2 years old.
Espero que ayude.
Dado un objeto obj
, me gustaría definir una propiedad de solo lectura ''prop''
y establecer su valor a val
. ¿Es esta la manera correcta de hacer eso?
Object.defineProperty( obj, ''prop'', {
get: function () {
return val;
}
});
El resultado debe ser (para val = ''test''
):
obj.prop; // ''test''
obj.prop = ''changed'';
obj.prop; // still ''test'' since it''s read-only
Este método funciona por cierto: http://jsfiddle.net/GHMjN/
No estoy seguro de si esta es la forma más fácil / más suave / más adecuada para hacerlo ...
En los navegadores nuevos o node.js , es posible usar Proxy para crear un objeto de solo lectura.
var obj = {
prop: ''test''
}
obj = new Proxy(obj ,{
setProperty: function(target, key, value){
if(target.hasOwnProperty(key))
return target[key];
return target[key] = value;
},
get: function(target, key){
return target[key];
},
set: function(target, key, value){
return this.setProperty(target, key, value);
},
defineProperty: function (target, key) {
return this.setProperty(target, key, value);
},
deleteProperty: function(target, key) {
return false;
}
});
Aún puede asignar nuevas propiedades a ese objeto, y también serían de solo lectura.
Ejemplo
obj.prop
// > ''test''
obj.prop = ''changed'';
obj.prop
// > ''test''
// New value
obj.myValue = ''foo'';
obj.myValue = ''bar'';
obj.myValue
// > ''foo''
En su lugar, podría utilizar la propiedad de writable
del descriptor de propiedad, que evita la necesidad de un acceso de get
:
var obj = {};
Object.defineProperty(obj, "prop", {
value: "test",
writable: false
});
Esto es ECMAScript 5, por lo que no funcionará en navegadores más antiguos.