OOP javascript e Simple Class Instantiation

Primeiro de tudo me desculpe se esta é uma pergunta estúpida. Eu escrevi dois trechos de código abaixo. O primeiro trecho de código encontrado emAqui escrito porJohn Resig e, sem dúvida, ele é um dos melhores e o segundo trecho de código é modificado por mim a partir do código original apenas para entender a diferença, mas não tenho certeza qual é a diferença entre ambos e o que posso e não posso fazer com ambos comparativamente . Por favor, alguém me ajude a entender a diferença. Obrigado.

<code>    function makeClass(){
        return function(args){
            if ( this instanceof arguments.callee ) {
                if ( typeof this.init == "function" )
                    this.init.apply( this, args.callee ? args : arguments );
                }
                else  return new arguments.callee( arguments );
        };
    }
    var User = makeClass();
    User.prototype.init = function(first, last){
      this.name = first + " " + last;
    };
    var user = User("John", "Resig");
    console.log(user);
</code>

Versão modificada

<code>    function myClass(args)
    {
        if (this instanceof arguments.callee) 
        {
            this.init = function(first, last){
                this.name = first + " " + last;
            };
            this.init.apply( this, args.callee ? args : arguments );
        }
        else    return new arguments.callee( arguments );
    }
    var obj = new myClass('Sheikh', 'Heera');
            console.log(obj);
</code>

Por que devo usar o protótipo do objeto para adicionar um método (depois de fazer uma instância) em vez de escrevê-lo dentro do construtor?

questionAnswers(1)

yourAnswerToTheQuestion