Ir para conteúdo
Fórum Script Brasil
  • 0

Erro no Livro Guia Definitivo JavaScript 6° Edição


Edengb

Pergunta

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

// 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....

Editado por Edengb
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...