<script> function p () {var len = arguments.length; for (var i = 0; i <len; i ++) {document.write (argumentos [i]+"<br/>"); }} función myClass (x, y) {this.x = x; this.y = y; this.show = function () {return this.x+this.y; }} var m1 = new MyClass (1,2); var m2 = new MyClass (3,4); P (m1.show (), m2.show ()); </script>Problemas existentes
1. Dado que todas las instancias copian entidades definidas por el mismo método, la eficiencia (eficiencia de la memoria y la ejecución ineficiente) se puede resolver mediante la herencia prototipo.
2. No se puede acceder al control de los valores de los atributos (privado, público) se puede resolver a través de cierres
El objeto de operación accedido por atributos no es una variable, sino una referencia al objeto
Procesamiento de lectura solo partes enteras de valores numéricos
Matemáticas [this <0? 'Celling': 'piso'] (this);
Matriz asociativa
En JS, debe aprobar objetos para implementar matrices asociativas
Las operaciones básicas se realizan mediante claves, elementos de configuración y eliminación de elementos.
<script> var map = {x: 3, y: 4}; p (map.x); eliminar map.x; //truep(map.x); // Undefinado El resultado de acceder a elementos inexistentes está indefinido. Dado que el valor se puede establecer en indefinido, es imposible juzgar si el valor existe comparando el valor con indefinido. Puede enumerarlo por en a = 'indefinido'; p (a); // undefinedp (typeOf map.x == a); // True </script>Como una matriz asociativa, debe prestar atención a
<script> function myClass (x, y) {this.x = x; this.y = y;} myclass.prototype.z = 5; var obj = new MyClass (1,2); para (varilla var en obj) {p (clave+":"+obj [key]); // Los atributos heredados a través del prototipo serán enumerados} // x: 1 y: 2 z: 5delete obj.x; // truep (obj.x); //undefinedp(obj.z); // 5 // Los atributos heredados a través del prototipo no se pueden eliminar Eliminar obj.z; //truep(obj.z) ;//5//when usando objetos como una matriz asociativa, generalmente se crean literales. Incluso si la vista usa un objeto vacío literal para crear una matriz asociativa sin elementos, el atributo del prototipo p ('toString' en obj); // trueVar obj1 = {}; p ('toString' en obj1); // true // enumenp (obj1.length); // Undefinedfor (var k en obj1) {p (obj1 [k]);} // No se enumeran elementos. Esto se debe al atributo enumerable.//truevar obj1 = {}; p ('toString' en obj1); // true // enumeración de p (obj1.length); // Undefinedfor (var k en obj1) {p (obj1 [k]);} // No se enumeran elementos. Esto se debe al atributo enumerable.//truevar obj1 = {}; p ('toString' en obj1); // true // atributo de autosuficiente var heredado por participar en el prototipo map = {}; p (map.hasownproperty ('toString')); //falsemapima'ToString'font>=1;p(map.HasownProperty('ToString ')); // mapa trueDelete ['toString']; p (map.hasownproperty ('toString')); // falso </script>Atributos
Los atributos del objeto también tienen algunos atributos
La siguiente tabla resume los atributos definidos en la quinta edición de ECMAScript, y el valor del atributo se define como atributos de valor.
Tabla 1
Nombre de atributo | significado |
escondido | El valor del atributo se puede reescribir |
enumerable | Puede ser enumerado por por en |
configurable | Puede cambiar los atributos y eliminar los atributos |
conseguir | Función Getter que especifica los valores de la propiedad |
colocar | Función setter que puede especificar valores de atributo |
Objetos inmutables
Es decir, un objeto cuyo estado no se puede cambiar después de la generación, y un objeto de cadena es un objeto inmutable típico.
El uso flexible de objetos inmutables puede mejorar la robustez del programa, como al pasarlo a los parámetros del método, hay un método para reescribir el contenido de objeto, etc.
Los objetos inmutables se pueden implementar en JS
1. Oculte el atributo (estado oculto) y no proporcione operaciones de cambio (implementación de cierre)
2. Uso flexible de las funciones proporcionadas por ECMAScript en la quinta edición
3. Uso flexible de atributos, setters y getters de escritores configurables
Las funciones utilizadas para admitir objetos inmutables en Ecmascript versión 5 se muestran en la siguiente tabla
Nombre del método | Nuevos atributos | Atributo eliminar | Cambio de valor de atributo | Método de confirmación |
prevenirtextensiones | incógnita | O | O | Object.IsExtensible |
sello | incógnita | incógnita | O | Objeto. |
congelar | incógnita | incógnita | incógnita | Object.Isfrozen |
Object.PreventExtensions Ejemplo
<script> var obj = {x: 2, y: 3}; object.preventExtensions (obj); // no puede agregar el atributo obj.z = 4; p (object.keys (obj)); // x, y // no puede eliminar el atributo obj.y; p (objeto.keys (obj)); // x // no puede agregar el valor del atributo obj.x = 20; p (obj.x); //20//Object.Seal Ejemplo Establece el atributo configurable del atributo a falso var obj = {x: 2, y: 3}; object.seal (obj); // no puede agregar o eliminar obj.z = 3; p (objeto.keys (obj)); // x, ydelete obj.x; //falsep(Object.Keys(obj)) ;//x,y//can Cambiar el valor del atributo obj.x = 20; p (obj.x); // 20 // Object.Freee Ejemplo establece el ejemplo de Writable of the Attribute a False var obj = {x: 2, y: 3}; Object.Freeze (obj); // no puede agregar o delete, ni puede el valor de atributo de atributo de atributo. obj.z = 3; P (Object.Keys (obj)); // x, y // puede cambiar el valor de atributo obj.x = 20; p (obj.x); // 20 </script>Necesito prestar atención
1. Para los tres métodos anteriores, no se puede restaurar una vez que se cambian.
2. Si desea hacer que el método heredado en la herencia prototipo sin cambios, debe mostrarlo.