tipos recorrer propiedades objetos objeto lista funciones entendiendo crear array javascript

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.