Mozilla's getting a new look. What do you think? https://mzl.la/brandsurvey

Object.defineProperties()

Este articulo necesita una revisión técnica. Cómo puedes ayudar.

Este articulo necesita una revisión editorial. Cómo puedes ayudar.

Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.

Sumario

El metodo Object.defineProperties() define nuevas o modifica propiedades existentes directamente en el objeto, returnando el objeto.

Sintaxis

Object.defineProperties(obj, propiedades)

Parametros

obj
El objeto sobre el cual se crearán o modificaran sus propiedades.
propiedades
An object whose own enumerable properties constitute descriptors for the properties to be defined or modified.

Descripción

Object.defineProperties, en escencia, define todas las propiedades correspondientes a las propiedades propias con capacidad de enumeración de props en el objeto objrops.

Ejemplo

Object.defineProperties(obj, {
  "property1": {
    value: true,
    writable: true
  },
  "property2": {
    value: "Hello",
    writable: false
  }
  // etc. etc.
});

Polyfill

Asumiendo una ejecución pristina del entorno con todos los nombres y propiedades referidas a sus valores iniciales, Object.defineProperties es casi completamente equivalente (noote el comentario en isCallable) a la siguiente reimplementación de JavaScript:

function defineProperties(obj, properties) {
  function convertToDescriptor(desc) {
    function hasProperty(obj, prop) {
      return Object.prototype.hasOwnProperty.call(obj, prop);
    }

    function isCallable(v) {
      // NB: modify as necessary if other values than functions are callable.
      return typeof v === "function";
    }

    if (typeof desc !== "object" || desc === null)
      throw new TypeError("bad desc");

    var d = {};

    if (hasProperty(desc, "enumerable"))
      d.enumerable = !!obj.enumerable;
    if (hasProperty(desc, "configurable"))
      d.configurable = !!obj.configurable;
    if (hasProperty(desc, "value"))
      d.value = obj.value;
    if (hasProperty(desc, "writable"))
      d.writable = !!desc.writable;
    if ( hasProperty(desc, "get") ) {
      var g = desc.get;

      if (!isCallable(g) && g !== "undefined")
        throw new TypeError("bad get");
      d.get = g;
    }
    if ( hasProperty(desc, "set") ) {
      var s = desc.set;
      if (!isCallable(s) && s !== "undefined")
        throw new TypeError("bad set");
      d.set = s;
    }

    if (("get" in d || "set" in d) && ("value" in d || "writable" in d))
      throw new TypeError("identity-confused descriptor");

    return d;
  }

  if (typeof obj !== "object" || obj === null)
    throw new TypeError("bad obj");

  properties = Object(properties);

  var keys = Object.keys(properties);
  var descs = [];

  for (var i = 0; i < keys.length; i++)
    descs.push([keys[i], convertToDescriptor(properties[keys[i]])]);

  for (var i = 0; i < descs.length; i++)
    Object.defineProperty(obj, descs[i][0], descs[i][1]);

  return obj;
}

Especificaciones

Especificación Estado Comentario
ECMAScript 5.1 (ECMA-262)
The definition of 'Object.defineProperties' in that specification.
Standard Definición inicial. Implementada en JavaScript 1.8.5
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.defineProperties' in that specification.
Standard  

Compatibilidad de navegadores

Basado en Kangax's compat tables.

Caracteristica Firefox (Gecko) Chrome Internet Explorer Opera Safari
Soporte básico 4.0 (2) 5 (previous versions untested) 9 11.60 5
Caracteristica Firefox Mobile (Gecko) Android IE Mobile Opera Mobile Safari Mobile
Soporte básico 4.0 (2) (Yes) ? 11.50 (Yes)

Ver también

Etiquetas y colaboradores del documento

 Colaboradores en esta página: mishelashala, teoli, guillermojmc
 Última actualización por: mishelashala,