JavaScript. Объявление методов объекта — обязательно через прототип?

В коде закомментированы два варианта. Оба работоспособны.
Корректно ли использовать второй вариант или он приводит к расходу лишней памяти?

var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;

        // вариант 2
        // this.greet = function () {return "Hello, " + this.greeting;}; 
    }

    // вариант 1
    //Greeter.prototype.greet = function () {   return "Hello, " + this.greeting;    };

    return Greeter;
})(); 

var a = new Greeter('123');
  • Вопрос задан
  • 2788 просмотров
Решения вопроса 1
Корректно, но он приводит к расходу лишней памяти. В варианте 1 у каждого экземпляра будет свой метод (т.е. в памяти это будут разные функции). В варианте 2 метод будет один на всех.

Вариант 1 обычно применяется если нужно захватить в замыкание переменные и действительно создавать разные функции. Если такой необходимости нет, следует использовать вариант 2.

Есть ещё вариант 3:
function sayGreet() {return "Hello, " + this.greeting;};
...
sayGreet.apply(greeter);

Если делать это в замыкании (например require) то получится private метод.

Рекомендую прочесть javascript: good parts. Недавно прочёл по совету коллег,очень многое разложилось по полочкам в голове, хотя до этого писал на js прилично.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
23 апр. 2024, в 19:21
300 руб./за проект
23 апр. 2024, в 19:05
15000 руб./за проект
23 апр. 2024, в 19:01
7000 руб./за проект