Да, есть разница:
someName.test1 = function() {alert("test1")}
добавляет эту функцию к объекту (или классу) someName
.
someName.protoype.test2 = function() {alert("test2")}
добавляет эту функцию к всем экземплярам класса someName
Для реального примера посмотрите на это:
Object.getOwnPropertyNames = function(obj) { ... };
, которая является просто функцией namespace в классе Object
, принимая интересующий объект в качестве первого параметра, тогда как если бы он был записан:
Object.prototype.getOwnPropertyNames = function() { ... };
Тогда каждый Object
будет иметь этот метод, и он будет использоваться так:
obj.getOwnPropertyNames();
[но не делайте этого, поскольку добавление методов к прототипу Object
не одобряется!]