2009-12-25 1 views
3
var foo1 = function() { 
    return { 
     init: function() { 
      alert(this+" hello foo1"); 
     } 
    }; 
}(); 

var foo2 = { 
    init: function() { 
     alert(this+" hello foo2"); 
    } 
}; 

foo1.init() 
foo2.init() 

Различия я вижу, является:В чем разница между этими двумя случаями javascript?

  • первым является «закрытие стиля», а второй нет.
  • первый задает заводскую функцию (*), которая создает объект и связывает результат этой фабрики с foo1, второй - простой одноэлементный, и вы не можете иметь больше экземпляров, если только не выполняете взлом .prototype.

Есть ли другие отличия? this обязательное поведение? неожиданные детонации браузера? плачущие котята?

(*) Другими словами, я мог бы сделать что-то вроде

var fooFactory = function() { 
    return { 
     init: function() { 
      alert(this+" hello foo1"); 
     } 
    }; 
} 

var foo=fooFactory(); 
var bar=fooFactory(); 

и foo и bar теперь два разных экземпляров одного и того же «класс» (на самом деле, они просто два объекта, которые «случаются» (по конструкции) иметь один и тот же интерфейс).

ответ

1

Одно ограничение для foo2 заключается в том, что вы не можете иметь понятия частных переменных. Тем не менее, это относится к сведениям о закрытии, о которых вы упомянули.

Смежные вопросы