Вопрос по oop, javascript – ООП javascript и Простое создание класса

6

Прежде всего, извините, если это глупый вопрос. Я написал два фрагмента кода ниже. Первый фрагмент кода найден изhere написаноJohn Resig и, несомненно, он один из лучших и второй фрагмент кода, который я модифицировал из исходного кода только для того, чтобы понять разницу, но на самом деле я не уверен, в чем разница между обоими и тем, что я могу и не могу делать с оба сравнительно. Пожалуйста, кто-нибудь, помогите мне понять разницу. Благодарю.

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

Модифицированная версия

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

Why should I use the object's prototype to add a method (after making an instance) instead of writing it inside the constructor ?

Ваш Ответ

1   ответ
7

а не в конструкторе, является то, что метод, определенный в прототипе, являетсяimmediately available to а такжеshared by (в памяти) все экземпляры объекта.

Определяя метод в конструкторе, этот метод специфичен для экземпляра объекта, его создающего. Если вы оскверните 10 ваших объектов, у вас будет 10copies метода в памяти, даже если они все одинаковы, пока вы не измените один из них.

Чтобы было ясно, хотя, поshared среди экземпляров объекта я не хочу сказать, что метод работает статически для любых свойств, к которым он обращается. Эти свойства (если определены сthis.) все еще зависят от конкретного случая. Просто вы не определяете несколько копий одного и того же метода.

Похожие вопросы