Sou um programador bastante experiente nos domínios .NET e Java e comecei a ler sobre JavaScript. Comprei o livro "The Good Parts", de Douglas Crockford, e sou imediatamente incomodado por algumas coisas.
Um é modificar os tipos fundamentais sem necessidade:
if (typeof Object.create !== 'function') {
Object.create = function (o) { //Really... 'o'? For a parameter you're only using twice?
function F() {}
F.prototype = o;
return new F();
};
}
newObject = Object.create(oldObject);
Obviamente, criar uma função com esse objetivo é útil e economiza tempo, mas POR QUE NA TERRA ele recomenda a criação no Object? Três respirações atrás, ele defendeu que os globais são maus e, em seguida, passou a consertar Object. Ele até testa se ele já existe e apenas assume que, se alguma outra biblioteca fez isso por ele, a implementação é a mesma.
Existe algum motivo para não criar isso no equivalente JS de um espaço para nome? ie
MY_UNIQUE_UTIL_LIBRARY.create = function(obj){...}; //The name would be shorter in reality.
Não me interpretem mal, acho que a aplicação de patches de macaco é útil, mas é algo que você faz quando há um benefício inerente. Eu não vejo um aqui? Existe um?
Respostas:
Object.create
é definido nas versões mais recentes dos navegadores (não é possível dizer exatamente desde quando). Você pode ver sua descrição na rede de desenvolvedores Mozilla .Este é apenas um polyfill (bastante semelhante ao da página, com poucas verificações) para poder usar a mesma função em navegadores mais antigos. No navegador mais recente, ele já está definido como uma função e, portanto, usará a versão otimizada do navegador, enquanto nos navegadores mais antigos, por padrão, é indefinido e usará esta versão.
fonte
Object.create
anterior ao ES5, então esta resposta é cronologicamente errada.beget
e ele o definiu em qualquer escopo em que estivesse ou nãoObject
- então essa resposta não é realmente cronologicamente errada.