Pessoal já estou 3 dias tentando relatar de um erro que vi no livro Guia Definitivo JavaScript 6° Edição. Espero que nesse fórum alguém me ajude a resolve essa questão.
Esse erro se encontra na Parte 1 JavaScript básica - Capitulo 8 Funções Página 176-175. No livro está exatamente assim:
Exemplo 8-3: A função extend(), corrigida, se necessário
// Define uma função extend que copia as propriedades de seu segundo
// argumento e dos subsequentes em seu primeiro argumento.
// Resolvemos um erro do IE aqui: em muitas versões do IE, o laço for/in
// não enumera uma propriedade enumerável de o, se o protótipo de o tem
// uma propriedade não enumerável de mesmo nome. Isso significa que
// propriedades como toString não são manipulados corretamente, a não ser
// que as verifiquemos explicitamente.
var extend = (function() { // Atribui o valor de retorno dessa função
// Primeiramente, verifica a presença do erro , antes de usar o patch.
for( var p in {toString: Null}) {
// Se chegamos aqui, então o laço for/in funciona corretamente e
// retornamos uma versão simples da função extend()
return function extend(o) {
for(var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for(var prop in source) o[prop] = source[prop];
}
return o;
};
}
//Se chegamos até aqui, isso significado que o laço for/in não enumerou
// a propriedade toString do objeto de teste. Portanto, retorna uma versão
// não enumeráveis de Object.prototype.
// E agora verifica as propriedade caso especial
for( var j = 0; j < protoprops.length; j++) {
prop = protoprops[j];
if(source.hasOwnProperty(prop)) o[prop] = source[prop];
return function patched_extend(o) {
for(var i = 1; i < arguments.length; i++) {
var source = arguments[i];
// Copia todas as propriedades enumeráveis
for(var prop in source) o[prop] = source[prop];
}
}
return o;
};
// Esta é a lista de propriedades do caso especial que verificamos
var protoprops = [“toString”, “valueOf”, ”constructor”, “hasOwnProperty”,
“isPrototypeOf”, “propertyIsEnumerable”, “toLocaleString”];
}());
Obs: Desculpe se o codigo não ficou totalmente legivel... é que não estou acostumado colocar aki...
Pessoal resumindo o problema... Depois do comentario "// E agora verifica as propriedade caso especial" temos dois problemas... 1°) no for, ele quer protoprops.length, mas o array protoprops só vai ser declarado depois (se só fosse isso tudo bem, é só declara acima do for), 2°) quase o mesmo tipo de erro, no if, if(source.hasOwnProperty(prop))... como que eles quer chamar o metodo para source.hasOwnProperty() se source ainda não existe? repara que ele é declarado em baixo:
...
if(source.hasOwnProperty(prop)) o[prop] = source[prop];
return function patched_extend(o) {
for(var i = 1; i < arguments.length; i++) {
var source = arguments;
...
Enfim o problema é esse. Se só fosse coisa da minha cabeça tudo bem, mas o problema ta no livro... e se vocês testa no navegador (modo desenvolvedor-console) ira dar erro (isso é o q mais me preocupada, o livro esta errado).
Desde já agradeço, obrigado pela paciência, e me desculpe se não consegui me expressar bem....
Pergunta
Edengb
Primeiramente Boa Tarde.
Pessoal já estou 3 dias tentando relatar de um erro que vi no livro Guia Definitivo JavaScript 6° Edição. Espero que nesse fórum alguém me ajude a resolve essa questão.
Esse erro se encontra na Parte 1 JavaScript básica - Capitulo 8 Funções Página 176-175. No livro está exatamente assim:
Exemplo 8-3: A função extend(), corrigida, se necessário
Obs: Desculpe se o codigo não ficou totalmente legivel... é que não estou acostumado colocar aki...
Pessoal resumindo o problema... Depois do comentario "// E agora verifica as propriedade caso especial" temos dois problemas... 1°) no for, ele quer protoprops.length, mas o array protoprops só vai ser declarado depois (se só fosse isso tudo bem, é só declara acima do for), 2°) quase o mesmo tipo de erro, no if, if(source.hasOwnProperty(prop))... como que eles quer chamar o metodo para source.hasOwnProperty() se source ainda não existe? repara que ele é declarado em baixo:
...
if(source.hasOwnProperty(prop)) o[prop] = source[prop];
return function patched_extend(o) {
for(var i = 1; i < arguments.length; i++) {
var source = arguments;
...
Enfim o problema é esse. Se só fosse coisa da minha cabeça tudo bem, mas o problema ta no livro... e se vocês testa no navegador (modo desenvolvedor-console) ira dar erro (isso é o q mais me preocupada, o livro esta errado).
Desde já agradeço, obrigado pela paciência, e me desculpe se não consegui me expressar bem....
Editado por EdengbLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.