Objeto método descripción de propiedad objeto

1. Concepto de objeto de descripción de atributo
JavaScript proporciona una estructura de datos interna que se utiliza para describir los atributos de objeto y controlar su comportamiento. Esta estructura de datos interna se denomina objeto de descripción de atributo. Cada atributo tiene su propio objeto de descripción de atributo correspondiente, que guarda cierta información original del atributo.
ejemplo

{
    
    
	value:'111',//默认是undefined
	writable:true, //值为true或false  value值是否可改变
	enumberable:true, //  该属性是否可遍历 设置false则执行for...in循环或者Object.keys则会跳过该属性值
	configurable:true,//是否可配置修改这些元属性(即 writable/enumberable/configurable)
	get:undefined,//是一个函数 ,表示该属性的取值函数getter,默认为undefined
	set:undefined,//是一个函数,表示该属性的存值函数getter,默认为undifined	
}

2. Cuatro funciones de uso común para la obtención de propiedades
1. Object.getOwnPropertyDescriptor () y Object.getOwnPropertyDescriptors () Obtención del objeto de descripción de propiedad del objeto.
Inserte la descripción de la imagen aquí
Ambas son el objeto de descripción de propiedad del objeto de obtención. La sintaxis es la siguiente:

 Object.getOwnPropertyDescriptors(Array)
 Object.getOwnPropertyDescriptor(Array,key)

2. Obect.getOwnPropertyNames () devuelve una matriz de todos los nombres de propiedad en un objeto, independientemente de si la propiedad se puede atravesar
Ejemplo
Inserte la descripción de la imagen aquí
3. Object.defineProperty () (modificar una propiedad) y Object.defineProperties (modificar varias propiedades).
Esta función permite Describir la definición del objeto o modificar una o más propiedades a través de propiedades y devolver el objeto modificado
Ejemplo de uso de
Inserte la descripción de la imagen aquí
Object.defineProperty () Ejemplo de uso de
Inserte la descripción de la imagen aquí
Object.defineProperties () 4. Object.prototype.propertylsEnumberable () devuelve un valor booleano para determinar un cierto Si cada atributo se puede atravesar
Utilice el ejemplo
Inserte la descripción de la imagen aquí
Preste atención a la sintaxis cuando utilice

array.propertyIsEnumerable('+key+')

5. Cambios de metaatributos

  • Se asigna escritura en el caso de falso, la asignación no tiene éxito, no se informará ningún error en circunstancias normales, pero se informará un error en modo estricto, incluso si se reasigna el valor original. Al mismo tiempo, el subobjeto no puede personalizar su valor
    Nota: Si el subobjeto desea reasignar, puede volver a sobrescribir el atributo de escritura del subobjeto.
  • Enumerable en el caso de falso para ... en / Object.keys () / JSON.stringify () no obtendrá el atributo (aunque el bucle no lo obtendrá, pero aún se puede obtener directamente)
  • Los cambios configurables valor / wrtable / enumerable / configurable en condiciones falsas informarán un error, pero se permite cambiar configurable de verdadero a falso. La asignación directa no informará un error pero no tendrá éxito (si configurable es verdadero, el atributo puede ser eliminado, Falso significa que el atributo no se puede eliminar)

6.
Accesor Además de la definición directa, el valor del atributo también puede ser definido por el accesor. La función de valor almacenado se llama setter, el valor de setter descrito por la propiedad se usa y la función de valor se llama getter. El valor de getter descrito por la propiedad se llama getter.
Una vez que se define el acceso, la función de setter / getter correspondiente se ser ejecutado, siempre y cuando se hace la conexión, que puede ser utilizado para establecer Muchas características avanzadas, como la prohibición de copiar de un atributo.
ejemplo de uso
Inserte la descripción de la imagen aquí
Nota: no se puede definir el valor al mismo tiempo, después de ajustar el conjunto y obtener funciones
. Otra El tipo de
Inserte la descripción de la imagen aquí
descriptor de acceso se utiliza a menudo cuando el valor del atributo depende de los datos internos del objeto.
7. Tres métodos de congelación para controlar el estado de
un objeto 1. Object.preventExtensions () hace imposible que un objeto agregue nuevas propiedades
Object.isExtensible () para verificar si el objeto usa este método.
2. Object.seal (), para que un objeto no pueda agregar nuevas propiedades ni eliminar propiedades antiguas, este método no afecta la modificación del valor de una determinada propiedad. Puede usar Object.isSealed () para verificar si un objeto usa Object.seal ()
3, Object.freeze (). No se pueden agregar nuevas propiedades, no se pueden eliminar propiedades antiguas, no se puede modificar el valor de la propiedad para convertirla en una constante Object.isFrozen () puede verificar si se usa Object.freeze ()
Las limitaciones de los tres métodos anteriores
se pueden cambiar cambiando el objeto prototipo Para agregar atributos al objeto

var obj = new Object();
Object.preventExtensions(obj);

var proto = Object.getPrototypeOf(obj);
proto.t = 'hello';
obj.t
// hello

En este momento, puede congelar el prototipo de obj de la siguiente manera

var obj = new Object();
Object.preventExtensions(obj);

var proto = Object.getPrototypeOf(obj);
proto.t = 'hello';
obj.t
// hello

Existe otra limitación. El método anterior congela el objeto al que apunta el atributo, pero no puede congelar el contenido del objeto en sí, como se muestra en el siguiente ejemplo:

var obj = {
    
    
  foo: 1,
  bar: ['a', 'b']
};
Object.freeze(obj);

obj.bar.push('c');
obj.bar // ["a", "b", "c"]

Supongo que te gusta

Origin blog.csdn.net/qq_40969782/article/details/115310204
Recomendado
Clasificación