No JavaScript, os objetos são definidos como "uma coleção de atributos não ordenados cujas propriedades podem conter valores, objetos ou funções básicos". Nos termos do leigo, podemos entender os objetos como conjuntos de pares de nomes-valor, onde os valores podem ser dados ou funções.
Geralmente, existem duas maneiras de criar um objeto personalizado. O primeiro é criar uma instância de um objeto e depois adicionar propriedades e métodos, como:
var pessoa = new Object (); pessoa.name = "scott"; pessoa.age = 24; pessoa.SayName = function () {alert (Person.name); }O segundo método é o método literal do objeto. Geralmente é recomendável usar este método para criar objetos, por exemplo:
var pessoa = {nome: "scott", idade: 24, SayName: function () {alert (this.name); }}Tipo de atributo
Existem duas propriedades diferentes definidas no JavaScript: Propriedades de dados e propriedades de acessórios. Os atributos de dados geralmente são usados para armazenar valores de dados, enquanto os atributos de acessórios geralmente executam operações GET/Set e não podem armazenar diretamente os valores dos dados. No ES5, definimos atributos para descrever vários recursos das propriedades. No JavaScript, não podemos acessar diretamente o recurso, por isso o colocamos em dois pares de colchetes, como [[enumerável]].
• Propriedades de dados
Os atributos de dados descrevem principalmente seu comportamento:
1. [[Configurável]]: o padrão é verdadeiro. Indica se o atributo pode ser excluído para redefinir o atributo, se as características do atributo podem ser modificadas ou se o atributo pode ser modificado para o atributo acessador;
2. [[Enumerable]]: o padrão é verdadeiro. Indica se o atributo pode ser retornado através do loop for-in;
3. [[WRITED]]: O padrão é verdadeiro. Indica se o valor do atributo pode ser modificado.
4. [[Valor]]: O valor padrão é indefinido. Representa o valor dos dados que contêm o atributo. Os valores de atributo de leitura e escrita são executados a partir desta posição.
Para propriedades definidas acima diretamente no objeto de pessoa, as propriedades [[configuráveis]], [[enumeráveis]] e [[gravitáveis]] são definidas como true por padrão, enquanto as propriedades [[valor]] são definidas como um valor específico. Se você deseja modificar as propriedades padrão de uma propriedade, poderá usar o método Object.DefineProperty () fornecido pelo ES5. Este método recebe três parâmetros: o objeto em que a propriedade está localizada, o nome da propriedade e um objeto descritor. Um objeto descritor pode conter apenas uma ou mais das quatro características acima. Exemplos são os seguintes:
var pessoa = {name: "scott"} object.DefineProperty (Pessoa, "Nome", {Writitht: false;}) console.log (Person.name); // "scott" pessoa.name = "Evan"; console.log (Person.name); // "Scott"Defina a propriedade gravável do atributo de nome do objeto de pessoa como false. O valor desse atributo não é modificado; portanto, a operação de cópia deste atributo será ignorada diretamente.
var pessoa = {name: "scott"} object.DefineProperty (pessoa, "nome", {configurável: false;}) console.log (Person.name); // "Scott" Excluir Person.name; console.log (Person.name); // "Scott"Pode -se observar que quando o valor da propriedade configurável no atributo de nome é definido como false, significa que o atributo não pode ser excluído do objeto. Mas deve -se notar que, quando uma propriedade é definida como incansativa, ela não pode ser transformada em configuração. No momento, modificar outros recursos que não são graváveis causará um erro, por exemplo:
var pessoa = {name: "scott"} object.DefineProperty (pessoa, "nome", {configurável: false;}) object.DefineProperty (Pessoa, "Nome", {Configurável: true; // Um erro será atingido aqui})Ou seja, depois de modificar o recurso configurável para false, haverá restrições ao modificar outros recursos.
• Propriedades do acessador
O atributo acessador não contém valores de dados. Ele contém um par de funções Getter e Setter. Quando o atributo acessador é lido, a função getter é chamada e o valor válido é retornado; Quando o atributo acessador é gravado, a função do setter é chamada e o novo valor é passado e a função do setter é responsável pelo processamento dos dados. Esta propriedade tem quatro características:
1. [[Configurável]]: o padrão é verdadeiro. Indica se o atributo pode ser excluído para redefinir o atributo, se as características do atributo podem ser modificadas ou se o atributo pode ser modificado para o atributo acessador;
2. [[Enumerable]]: o padrão é verdadeiro. Indica se o atributo pode ser retornado através do loop for-in;
3. [[Get]]: a função chamada ao ler atributos, o padrão é indefinido;
4. [[Set]]: A função chamada ao escrever atributos, o padrão é indefinido.
As propriedades do acessador não podem ser definidas diretamente, elas devem ser definidas através da função Object.DefineProperty (), por exemplo:
var pessoa = {_name: "scott", _age: 24, _tel: 86247}; // O atributo de nome é o object.DefineProperty (Pessoa, "Nome", {get: function () {return this._name;}}); // O atributo de idade é objeto de gravação-somente. // O atributo Tel é o object.DefineProperty (Pessoa, "tel", {get: function () {return this._tel;}, set: function (p) {this._tel = p;}}); console.log (Person.name); // "scott" pessoa.name = "Evan"; console.log (Person.name); // "Scott", a modificação do atributo de nome é inválida.console.log (Person.age); // indefinido, o atributo ilegível Person.age = 25; console.log (Person._age); // 25, o console.log (Person.tel); // "86247", o atributo legível Person.tel = "13975"; console.log (Person.tel); // "13975", a modificação pode ser feitaO sublinhado antes do atributo indica um atributo que só pode ser acessado através do método do objeto. Quando usamos o pessoa.name, na verdade chamamos a função getter do atributo de nome e, quando atribuímos um valor ao pessoa.name, chamamos a função do setter do atributo de nome, para que o relacionamento entre o atributo e o acessador seja muito claro.
Defina vários atributos
De fato, o ES5 nos fornece um método para definir várias propriedades para um objeto, ou seja, objeto.DefineProperties (). Esta função recebe dois parâmetros, o objeto em que a propriedade está localizada e o objeto composto pelos atributos que precisam ser modificados e seus objetos descritores. Por exemplo, modifique o exemplo acima para definir várias propriedades de uma só vez, como segue:
var pessoa = {_name: "scott", _age: 24, _tel: 86247}; Object.DefineProperties (pessoa, {nome: {get: function () {return this._name;}}, idade: {set: function (p) {this._age = p;}}}, tel: {get: function () {return this._tel;}, set: function (p) {this._tel;Leia propriedades
ES5 fornece o método Object.TetownProperTyDescripter () para obter o descritor para uma determinada propriedade. Este método recebe dois parâmetros: o objeto em que o atributo reside e o nome do atributo de seu descritor a ser lido. O resultado retornará um objeto. Se for um atributo acessador, os objetos retornados incluem configuração, enumerável, obtenha e definir; Se for um atributo de dados, as propriedades do objeto retornado incluem configuração, enumerável, gravável e valor. Para o exemplo acima, use o seguinte:
var pessoa = {_name: "scott", _age: 24, _tel: 86247}; Object.DefineProperties (pessoa, {nome: {get: function () {return this._name;}}, idade: {set: function (p) {this._age = p;}}}, tel: {get: function () {return this._tel;}, set: function (p) {this._tel; var descritor = object.GetownProperTyDescripter (Pessoa, "tel"); console.log (descripter.value); // console indefinido.log (descriptter.enumerable); // false console.log (typeof descrição.get); //"função"O código acima obtém a propriedade Tel do objeto de pessoa. Como é uma propriedade acessadora, seu valor é indefinido, enumerável é falso e o GET é um ponteiro para a função Getter.
O artigo acima discute brevemente os atributos de dados JavaScript e os atributos de acessórios é todo o conteúdo que compartilhei com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.