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 прилично.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 10:42
150000 руб./за проект
25 апр. 2024, в 10:41
2000 руб./за проект
25 апр. 2024, в 10:25
2000 руб./за проект