ES5 agregó un number de methods a Object
, que parecen romper la consistencia semántica de JavaScript.¿Por qué los métodos de objeto ES5 no se agregaron a Object.prototype?
Por ejemplo, antes de esta extensión, la API de JavaScript siempre giraba en torno al operarting en el objeto en sí;
var arrayLength = [].length;
var firstPosInString = "foo".indexOf("o");
... donde como son los nuevos métodos de Objeto;
var obj = { };
Object.defineProperty(obj, {
value: 'a',
writable: false
});
... cuando el siguiente habría sido mucho más conformante:
var obj = { };
obj.defineProperty({
value: 'a',
writable: false
});
Puede alguien me refresque la curiosidad de por qué es esto? ¿Hay algún fragmento de código que rompa? ¿Hay algún debate público realizado por el comité de normas sobre por qué eligieron este enfoque?
Interesante ... ¿sabes cómo se alinea con' Object.create'? ¿Crockford lo propuso como 'Object.create' después de que se hubieran tomado estas decisiones, o antes de eso? –
Buena pregunta. No tengo ni idea :) Creo que Crockford renombró su 'Object.beget' a' Object.create' aproximadamente al mismo tiempo cuando se discutieron estas API. FWIW, el documento dice: "Observe que Object.create sin su segundo argumento opcional es esencialmente la misma operación que la función engendrada que se promovió ampliamente. Nosotros (quizás no sorprendentemente) estamos de acuerdo con la utilidad de esta función, pero sentimos que la palabra "engendrar" probablemente sea confusa para muchos hablantes no nativos de inglés .'_ – kangax
Crockford participó directamente en el diseño ES5 y propuso originalmente "engendrar". "crear" surgió como el nombre preferido durante las discusiones de diseño posteriores. Cambió el nombre de "engendrar" en su libro para reflejar la decisión de diseño de ES. –