One place for hosting & domains

      Objetos

      Cómo usar métodos de objetos en JavaScript


      Introducción

      Los objetos de JavaScript son grupos de pares clavevalor. Los valores pueden consistir en propiedades y métodos, y pueden contener todos los demás tipos de datos de JavaScript, como cadenas, números y booleanos.

      Todos los objetos de JavaScript derivan del constructor del Objectprincipal.Object tiene muchos métodos incorporados útiles a los cuales podemos acceder y recurrir para simplificar el trabajo con objetos individuales. A diferencia de los métodos Array.prototype, como sort() y reverse() que se usan en la instancia de Array, los métodos Object se usan directamente en el constructor Object y emplean la instancia del objeto como parámetro. Esto se conoce como método estático.

      En este tutorial, se detallarán importantes métodos de objeto incorporados, y en cada sección posterior se abordará un método específico y sxe proporcionará un ejemplo de uso.

      Requisitos previos

      Para aprovechar al máximo de este tutorial, debería estar familiarizado con la creación, la modificación y el funcionamiento de los objetos, aspectos que podrá ver en el artículo “Comprensión de objetos en JavaScript”.

      Para obtener orientación adicional sobre JavaScript en general, puede revisar nuestra serie Cómo producir código en JavaScript.

      Object.create()

      El método Object.create() se usa para crear un nuevo objeto y vincularlo al prototipo de un objeto existente.

      Podemos crear una instancia de objeto job y ampliarla para obtener un objeto más específico.

      // Initialize an object with properties and methods
      const job = {
          position: 'cashier',
          type: 'hourly',
          isAvailable: true,
          showDetails() {
              const accepting = this.isAvailable ? 'is accepting applications' : "is not currently accepting applications";
      
              console.log(`The ${this.position} position is ${this.type} and ${accepting}.`);
          }
      };
      
      // Use Object.create to pass properties
      const barista = Object.create(job);
      
      barista.position = "barista";
      barista.showDetails();
      

      Output

      The barista position is hourly and is accepting applications.

      El objeto barista ahora tiene una propiedad, position, pero las propiedades y los métodos de job que restan están disponibles a través del prototipo. Object.create() es útil para que el código siga siendo DRY mediante la reducción de la duplicación.

      Object.keys()

      Object.keys() crea una matriz que contiene las claves de un objeto.

      Podemos crear un objeto e imprimir la matriz de claves.

      // Initialize an object
      const employees = {
          boss: 'Michael',
          secretary: 'Pam',
          sales: 'Jim',
          accountant: 'Oscar'
      };
      
      // Get the keys of the object
      const keys = Object.keys(employees);
      
      console.log(keys);
      

      Output

      ["boss", "secretary", "sales", "accountant"]

      Object.keys puede usarse para generar repeticiones a través de las claves y los valores de un objeto.

      // Iterate through the keys
      Object.keys(employees).forEach(key => {
          let value = employees[key];
      
           console.log(`${key}: ${value}`);
      });
      

      Output

      boss: Michael secretary: Pam sales: Jim accountant: Oscar

      Object.keys también es útil para verificar la extensión de un objeto.

      // Get the length of the keys
      const length = Object.keys(employees).length;
      
      console.log(length);
      

      Output

      4

      Mediante la propiedad length, pudimos contar las 4 propiedades de employees.

      Object.values()

      Object.values() crea una matriz que contiene los valores de un objeto.

      // Initialize an object
      const session = {
          id: 1,
          time: `26-July-2018`,
          device: 'mobile',
          browser: 'Chrome'
      };
      
      // Get all values of the object
      const values = Object.values(session);
      
      console.log(values);
      

      Output

      [1, "26-July-2018", "mobile", "Chrome"]

      Object.keys() y Object.values() le permiten mostrar los datos de un objeto.

      Object.entries()

      Object.entries()crea una matriz anidada con los pares clave-valor de un objeto.

      // Initialize an object
      const operatingSystem = {
          name: 'Ubuntu',
          version: 18.04,
          license: 'Open Source'
      };
      
      // Get the object key/value pairs
      const entries = Object.entries(operatingSystem);
      
      console.log(entries);
      

      Output

      [ ["name", "Ubuntu"] ["version", 18.04] ["license", "Open Source"] ]

      Una vez que contemos con las matrices de pares claves-valor, podremos usar el método forEach() para repetir los resultados y trabajar con ellos.

      // Loop through the results
      entries.forEach(entry => {
          let key = entry[0];
          let value = entry[1];
      
          console.log(`${key}: ${value}`);
      });
      

      Output

      name: Ubuntu version: 18.04 license: Open Source

      El método Object.entries() solo mostrará las propiedades de la instancia del objeto. No mostrará ninguna propiedad que pueda heredarse a través de su prototipo.

      Object.assign()

      Object.assign() se usa para copiar valores de un objeto a otro.

      Podemos crear dos objetos y fusionarlos con Object.assign().

      // Initialize an object
      const name = {
          firstName: 'Philip',
          lastName: 'Fry'
      };
      
      // Initialize another object
      const details = {
          job: 'Delivery Boy',
          employer: 'Planet Express'
      };
      
      // Merge the objects
      const character = Object.assign(name, details);
      
      console.log(character);
      

      Output

      {firstName: "Philip", lastName: "Fry", job: "Delivery Boy", employer: "Planet Express"}

      También es posible usar el operador de propagación (...) para realizar la misma tarea. En el siguiente código, modificaremos la forma en que declaramos character mediante la fusión de los objetos name y details.

      // Initialize an object
      const name = {
          firstName: 'Philip',
          lastName: 'Fry'
      };
      
      // Initialize another object
      const details = {
          job: 'Delivery Boy',
          employer: 'Planet Express'
      };
      
      // Merge the object with the spread operator
      const character = {...name, ...details}
      
      console.log(character);
      

      Output

      {firstName: "Philip", lastName: "Fry", job: "Delivery Boy", employer: "Planet Express"}

      Esta sintaxis de propagación en literales de objeto también se conoce como “clonación superficial”.

      Object.freeze()

      Object.freeze() impide la modificación de propiedades y valores de un objeto, y evita que se agreguen propiedades a un objeto o que se eliminen de él.

      // Initialize an object
      const user = {
          username: 'AzureDiamond',
          password: 'hunter2'
      };
      
      // Freeze the object
      const newUser = Object.freeze(user);
      
      newUser.password = '*******';
      newUser.active = true;
      
      console.log(newUser);
      

      Output

      {username: "AzureDiamond", password: "hunter2"}

      En el ejemplo anterior, intentamos anular la contraseña hunter2 con *******, pero la propiedad password siguió siendo la misma. También intentamos agregar una nueva propiedad, active, pero no fue posible.

      Object.isFrozen() está disponible para determinar si un objeto se congeló o no, y muestra un booleano.

      Object.seal()

      Object.seal() impide la adición de nuevas propiedades a un objeto, pero permite la modificación de propiedades existentes. Este método es similar a Object.freeze(). Actualice su consola antes de implementar el código siguiente para evitar un error.

      // Initialize an object
      const user = {
          username: 'AzureDiamond',
          password: 'hunter2'
      };
      
      // Seal the object
      const newUser = Object.seal(user);
      
      newUser.password = '*******';
      newUser.active = true;
      
      console.log(newUser);
      

      Output

      {username: "AzureDiamond", password: "*******"}

      La nueva propiedad active no se agregó al objeto sellado, pero la propiedad password se cambió de forma correcta.

      Object Object.getPrototypeOf()

      Object.getPrototypeOf() se usa para obtener la propiedad interna oculta [[Prototype]] de un objeto, también accesible a través de la propiedad __proto__.

      En este ejemplo, podemos crear una matriz que tenga acceso al prototipo Array.

      const employees = ['Ron', 'April', 'Andy', 'Leslie'];
      
      Object.getPrototypeOf(employees);
      

      Output

      [constructor: ƒ, concat: ƒ, find: ƒ, findIndex: ƒ, pop: ƒ, …]

      Podemos ver en el resultado que el prototipo de la matriz employees tiene acceso a pop, find y otros métodos de prototipo Array. Podemos confirmarlo probando el prototipo employees en comparación con Array.prototype.

      Object.getPrototypeOf(employees) === Array.prototype;
      

      Output

      true

      Este método puede ser útil para obtener más información sobre un objeto o asegurarse de que tenga acceso al prototipo de otro objeto.

      También existe un método Object.setPrototypeOf() asociado, que agregará un prototipo a otro objeto. Se recomienda usar Object.create() en su lugar, ya que es más rápido y tiene mejor rendimiento.

      Conclusión

      Los objetos tienen muchos métodos útiles que nos ayudan a modificarlos, protegerlos y generar repeticiones de ellos. En este tutorial, abordamos la forma de crear y asignar nuevos objetos, repetir las claves y los valores de estos y a congelarlos o sellarlos.

      Si necesita consultar material sobre los objetos de JavaScript, puede leer “Información sobre objetos de JavaScript”. Si desea familiarizarse con la cadena de prototipos, puede consultar “Información sobre los prototipos y la herencia en JavaScript”.



      Source link

      Serviços de Armazenamento de Objetos versus Armazenamento em Blocos


      Introdução

      O armazenamento de dados flexível e escalável é um requisito básico para a maioria dos aplicativos e serviços que estão sendo desenvolvidos com técnicas e ferramentas modernas. Seja armazenando grandes ou pequenas quantidades de imagens, vídeos ou pequenos blocos de texto, os desenvolvedores de aplicativos precisam de uma solução para o armazenamento e a recuperação do conteúdo gerado por usuários, logs, backups e assim por diante.

      Com os deployments complexos atuais, containers, e infraestrutura efêmera, os dias de simplesmente salvar arquivos no disco em um único servidor acabaram. Provedores de nuvem desenvolveram serviços para preencher as necessidades de armazenamento dos deployments de aplicações modernas, e eles se encaixam principalmente em duas categorias: armazenamento de objetos e armazenamento em blocos.

      Vamos dar uma olhada em ambos e discutir as vantagens, desvantagens e casos de uso para cada um.

      O que é o Armazenamento em Blocos

      Os serviços de armazenamento em blocos ou block storage são relativamente simples e familiares. Eles fornecem um dispositivo de armazenamento em blocos tradicional — como um disco rígido — através da rede. Os provedores de nuvem geralmente têm produtos que podem provisionar um dispositivo de armazenamento em blocos de qualquer tamanho e anexá-lo à sua máquina virtual.

      A partir disso, você poderia tratá-lo como um disco normal. Você pode formatá-lo com um sistema de arquivos e armazenar arquivos nele, combinar vários dispositivos em um RAID, ou configurar um banco de dados para gravar diretamente no dispositivo de blocos, evitando completamente a sobrecarga do sistema de arquivos. Além disso, os dispositivos de armazenamento em blocos conectados à rede geralmente têm algumas vantagens exclusivas em relação aos discos rígidos normais:

      • Você pode tirar snapshots ou instantâneos ao vivo de todo o dispositivo para fins de backup
      • Dispositivos de armazenamento em blocos podem ser redimensionados para acomodar as necessidades de crescimento
      • Você pode facilmente desanexar e mover dispositivos de armazenamento em blocos entre as máquinas

      Esta é uma configuração muito flexível que pode ser útil para a maioria dos aplicativos de qualquer tipo. Vamos resumir algumas vantagens e desvantagens da tecnologia.

      Algumas vantagens do armazenamento em blocos são:

      • O Armazenamento em blocos é um paradigma familiar. Pessoas e softwares entendem e suportam arquivos e sistemas de arquivos quase que universalmente
      • Dispositivos de blocos são bem suportados. Toda linguagem de programação pode ler e gravar arquivos facilmente
      • Permissões de sistema de arquivos e controles de acesso são familiares e bem entendidos
      • Os dispositivos de armazenamento em bloco fornecem I/O de baixa latência, sendo então, adequados para uso por bancos de dados.

      As desvantagens do armazenamento em blocos são:

      • O armazenamento em blocos está ligado a um servidor de cada vez
      • Blocos e sistemas de arquivos tem metadados limitados sobre os blobs de informações que eles estão armazenando (data da criação, proprietário, tamanho). Qualquer informação adicional sobre o que você está armazenando tem que ser tratada no nível da aplicação e do banco de dados, o que é uma complexidade adicional para um desenvolvedor se preocupar
      • Você precisa pagar por todo o espaço de armazenamento em blocos que você alocou, mesmo que você não o esteja usando
      • Você só pode acessar o armazenamento em blocos através de um servidor em execução
      • O armazenamento em blocos precisa de mais trabalho e configuração manual se comparado ao armazenamento de objetos (escolha de sistemas de arquivos, permissões, versionamento, backups, etc).

      Devido às suas características de I/O rápida, os serviços de armazenamento em blocos são adequados para armazenar dados em bancos de dados tradicionais. Além disso, muitos aplicativos legados que exigem armazenamento normal do sistema de arquivos precisarão usar um dispositivo de armazenamento em blocos.

      Se o seu provedor de nuvem não oferece um serviço de armazenamento em blocos, você pode executar o seu próprio serviço usando OpenStack Cinder, Ceph, ou o serviço iSCSI integrado disponível em muitos dispositivos NAS.

      O que é o Armazenamento de Objetos

      No mundo moderno da computação em nuvem, o armazenamento de objetos ou object storage é o armazenamento e a recuperação de blobs (grandes objetos binários) não estruturados de dados e metadados utilizando uma API HTTP. Em vez da quebra dos arquivos em blocos para armazená-los em disco usando um sistema de arquivos, lidamos com objetos inteiros armazenados na rede. Esses objetos podem ser um arquivo de imagem, logs, arquivos HTML ou qualquer bloco de bytes auto contido. Eles são não estruturados porque não há um esquema ou formato específico que eles precisem seguir.

      O Armazenamento de Objetos decolou porque simplificou muito a experiência do desenvolvedor. Como a API consiste de solicitações HTTP padrão, bibliotecas são rapidamente desenvolvidas para a maioria das linguagens de programação. O salvamento de um blob de dados tornou-se tão fácil quanto uma solicitação HTTP PUT ao object store. A recuperação de arquivo e metadados é uma solicitação GET normal. Além disso, a maioria dos serviços de armazenamento de objetos também pode servir os arquivos publicamente para seus usuários, eliminando a necessidade de manter um servidor web para hospedar recursos estáticos.

      Além do mais, os serviços de armazenamento de objetos cobram apenas pelo espaço de armazenamento que você usa (alguns também cobram por solicitação HTTP e por largura de banda de transferência). Isso é um benefício para pequenos desenvolvedores, que podem obter armazenamento de classe mundial e hospedagem de recursos a custos que aumentam com o uso.

      Entretanto, o armazenamento de objetos não é a solução ideal para todas as situações. Vamos olhar um resumo dos benefícios e desvantagens.

      Algumas vantagens do armazenamento de objetos são:

      • Uma API HTTP simples, com clientes disponíveis para todos os principais sistemas operacionais e linguagens de programação
      • Uma estrutura de custos na qual que você paga apenas pelo que usa
      • Um serviço interno de publicação de recursos significando um servidor a menos que você precisa gerenciar
      • Alguns provedores armazenamento de objetos oferecem integração com CDN, que armazena seus recursos em cache em todo o mundo para fazer downloads e carregamentos de página mais rápidos para seus usuários
      • O versionamento opcional significa que você pode recuperar versões antigas de objetos para se proteger da sobrescrita acidental de dados
      • Os serviços de armazenamento de objetos podem escalar facilmente de necessidades modestas para casos de uso realmente intensos, sem que o desenvolvedor tenha que lançar mais recursos ou rearquitetar a aplicação para lidar com a carga
      • Usar um serviço de armazenamento de objetos significa que você não precisa manter discos rígidos e matrizes RAID, pois isso é feito pelo provedor de serviços.
      • A capacidade de armazenar trechos de metadados junto com seu blob de dados pode simplificar ainda mais a arquitetura do seu aplicativo

      Algumas desvantagens do armazenamento de objetos são:

      • Você não pode utilizar serviços de armazenamento de objetos para manter um banco de dados tradicional, devido à alta latência desses serviços
      • O armazenamento de objetos não permite que você altere apenas um fragmento de dados, você deve ler e escrever um objeto inteiro de uma só vez. Por exemplo, em um sistema de arquivos, você pode facilmente adicionar uma única linha ao final de um arquivo de log. Em um sistema de armazenamento de objetos, você precisaria recuperar o objeto, adicionar a nova linha e gravar todo o objeto de volta. Isso torna o armazenamento de objetos menos ideal para dados que mudam com muita frequência
      • Sistemas operacionais não podem montar facilmente um armazenamento de objetos como um disco normal. Existem alguns clientes e adaptadores para ajudar nisso, mas em geral, usar e navegar em um armazenamento de objetos não é tão simples quanto folhear diretórios em um navegador de arquivos

      Devido a essas propriedades, o armazenamento de objetos é útil para hospedar recursos estáticos, salvamento de conteúdo criado por usuários tais como imagens e filmes, armazenamento de arquivos de backup, armazenamento de logs, por exemplo.

      Existem algumas soluções de armazenamento de objetos que você pode hospedar, embora você tenha que abrir mão de alguns dos benefícios de uma solução hospedada (como não ter que se preocupar com discos rígidos e problemas de dimensionamento). Você pode experimentar o Minio, um popular servidor de armazenamento de objetos escrito na linguagem Go, o Ceph, ou o OpenStack Swift.

      Conclusão

      A escolha de uma solução de armazenamento pode ser uma decisão complexa para desenvolvedores. Neste artigo discutimos as vantagens e desvantagens tanto dos serviços de armazenamento em blocos quanto dos serviços de armazenamento de objetos. É provável que qualquer aplicativo suficientemente complexo precisará dos dois tipos de armazenamento para atender a todas as suas necessidades.



      Source link