En JavaScript, los objetos se definen como "una colección de atributos desordenados cuyas propiedades pueden contener valores, objetos o funciones básicos". En términos de Layman, podemos entender los objetos como conjuntos de pares de valor de nombre, donde los valores pueden ser datos o funciones.
Por lo general, hay dos formas de crear un objeto personalizado. El primero es crear una instancia de un objeto y luego agregarle propiedades y métodos, como:
Var Person = New Object (); persona.name = "Scott"; persona.AGE = 24; persona.sayname = function () {alert (persona.name); }El segundo método es el método literal de objetos. Generalmente se recomienda usar este método para crear objetos, por ejemplo:
var persona = {nombre: "Scott", edad: 24, sayname: function () {alert (this.name); }}Tipo de atributo
Hay dos propiedades diferentes definidas en JavaScript: propiedades de datos y propiedades de accesorios. Los atributos de datos generalmente se utilizan para almacenar valores de datos, mientras que los atributos de accesorios generalmente realizan operaciones GET/SET y no pueden almacenar directamente los valores de datos. En ES5, definimos atributos para describir varias características de las propiedades. En JavaScript, no podemos acceder directamente a la función, por lo que la colocamos en dos pares de soportes cuadrados, como [[enumerable]].
• Propiedades de datos
Los atributos de datos describen principalmente su comportamiento:
1. [[Configurable]]: el valor predeterminado es verdadero. Indica si el atributo se puede eliminar para redefinir el atributo, si las características del atributo pueden modificarse o si el atributo puede modificarse en el atributo del accesor;
2. [[Enumerable]]: el valor predeterminado es verdadero. Indica si el atributo se puede devolver a través del bucle for-in;
3. [[Writable]]: el valor predeterminado es verdadero. Indica si el valor del atributo puede modificarse.
4. [[Valor]]: el valor predeterminado está indefinido. Representa el valor de datos que contiene el atributo. Lectura y escritura Los valores de los atributos se realizan a partir de esta posición.
Para las propiedades definidas anteriormente directamente en el objeto de la persona, sus propiedades [[configurables]], [[enumerables]] y [[Writable]] se establecen en verdadero de forma predeterminada, mientras que las propiedades [[valor]] se establecen en un valor específico. Si desea modificar las propiedades predeterminadas de una propiedad, puede usar el método Object.DefineProperty () proporcionado por ES5. Este método recibe tres parámetros: el objeto donde se encuentra la propiedad, el nombre de la propiedad y un objeto descriptor. Un objeto descriptor solo puede contener una o más de las cuatro características anteriores. Los ejemplos son los siguientes:
Var Person = {nombre: "Scott"} objeto.defineProperty (persona, "nombre", {Writable: false;}) console.log (persona.name); // "Scott" Person.name = "Evan"; console.log (persona.name); // "Scott"Establezca la propiedad de escritura del atributo del nombre del objeto de la persona en falso. El valor de este atributo no se modifica, por lo que la operación de copia de este atributo se ignorará directamente.
Var Person = {name: "Scott"} object.defineProperty (persona, "nombre", {configurable: false;}) console.log (persona.name); // "Scott" Eliminar persona.name; console.log (persona.name); // "Scott"Se puede ver que cuando el valor de la propiedad configurable del atributo de nombre se establece en falso, significa que el atributo no se puede eliminar del objeto. Pero debe tenerse en cuenta que cuando una propiedad se define como poco convencible, no se puede volver a configurar. En este momento, la modificación de otras características que no sean Writable causará un error, por ejemplo:
var persona = {nombre: "Scott"} objeto.defineProperty (persona, "nombre", {configurable: false;}) objeto.defineProperty (persona, "nombre", {configurable: true; // se lanzará aquí})Es decir, después de modificar la función configurable a False, habrá restricciones al modificar otras características.
• Propiedades de accesorios
El atributo del accesor no contiene valores de datos. Contiene un par de funciones de Getter y Setter. Cuando se lee el atributo del accesor, se llama a la función Getter y se devuelve el valor válido; Cuando se escribe el atributo del accesor, se llama la función setter y se pasa el nuevo valor, y la función setter es responsable de procesar los datos. Esta propiedad tiene cuatro características:
1. [[Configurable]]: el valor predeterminado es verdadero. Indica si el atributo se puede eliminar para redefinir el atributo, si las características del atributo pueden modificarse o si el atributo puede modificarse en el atributo del accesor;
2. [[Enumerable]]: el valor predeterminado es verdadero. Indica si el atributo se puede devolver a través del bucle for-in;
3. [[Get]]: la función llamada cuando se lee atributos, el valor predeterminado está indefinido;
4. [[SET]]: la función llamada Al escribir atributos, el valor predeterminado está indefinido.
Las propiedades de los accesorios no se pueden definir directamente, deben definirse a través de la función objeto. DefineProperty (), por ejemplo:
Var Person = {_name: "Scott", _age: 24, _tel: 86247}; // El atributo de nombre es objeto de solo lectura.defineProperty (persona, "nombre", {get: function () {return this._name;}}); // El atributo de edad es objeto de escritura. DefineProperty (persona, "edad", {set: function (p) {this._age = p;}}); // El atributo de Tel es objeto de solo lectura.defineProperty (persona, "tel", {get: function () {return this._tel;}, set: function (p) {this._tel = p;}}); console.log (persona.name); // "Scott" Person.name = "Evan"; console.log (persona.name); // "Scott", la modificación del atributo de nombre es inválido.console.log (persona.age); // Undefined, el atributo ilegible persona.age = 25; console.log (persona._age); // 25, el console.log (persona.tel); // "86247", el atributo legible persona.tel = "13975"; console.log (persona.tel); // "13975", la modificación se puede hacerEl subrayador antes del atributo indica un atributo a la que solo se puede acceder a través del método de objeto. Cuando usamos Person.Name, en realidad llamamos a la función Getter del atributo de nombre, y cuando asignamos un valor a Person.Name, llamamos a la función Setter del atributo de nombre, para que la relación entre el atributo y el accesor sea muy clara.
Definir múltiples atributos
De hecho, ES5 nos proporciona un método para definir múltiples propiedades para un objeto, a saber, objeto. DefineProperties (). Esta función recibe dos parámetros, el objeto donde se encuentra la propiedad y el objeto compuesto por los atributos que deben modificarse y sus objetos descriptores. Por ejemplo, modifique el ejemplo anterior para definir múltiples propiedades a la vez, como sigue:
Var Person = {_name: "Scott", _age: 24, _tel: 86247}; Object.defineProperties (persona, {name: {get: function () {return this._name;}}, edad: {set: function (p) {this._age = p;}}, tel: {get: function () {return this._tel;}, set: function (p) {this._tel = p;}});Leer propiedades
ES5 proporciona el método Object.getOwnPropertyDescripter () para obtener el descriptor para una propiedad determinada. Este método recibe dos parámetros: el objeto donde reside el atributo y el nombre del atributo de su descriptor a leer. El resultado devolverá un objeto. Si se trata de un atributo de accesor, los objetos devueltos incluyen configable, enumerable, get y establecido; Si se trata de un atributo de datos, las propiedades del objeto devuelto incluyen configable, enumerable, escritura y valor. Para el ejemplo anterior, use lo siguiente:
Var Person = {_name: "Scott", _age: 24, _tel: 86247}; Object.defineProperties (persona, {name: {get: function () {return this._name;}}, edad: {set: function (p) {this._age = p;}}, tel: {get: function () {return this._tel;}, set: function (p) {this._tel = p;}}); var describre = object.getownpropertyDescripter (persona, "tel"); console.log (descripter.value); // console indefinido.log (descripter.enumerable); // false console.log (typeof Descriptioner.get); //"función"El código anterior obtiene la propiedad TEL del objeto de la persona. Dado que es una propiedad de accesor, su valor está indefinido, enumerable es falso y Get es un puntero a la función Getter.
El artículo anterior discute brevemente los atributos de datos de JavaScript y los atributos de accesorios es todo el contenido que he compartido con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.