@igoryusha22

Чем отличается метод прототипа (статический метод) от метода функции-конструктора?

var Juice = function (price) {
        this.price = price;
        
        this.apple = function ( ) {               // метод объекта
                console.log("Hi I'm apple juice.");
        };
};

Juice.prototype.banana = function ( ) {          // метод прототипа Juice
        console.log("Hi I'm banana juice");
};

Juice.orange = function ( ) {                 // метод функции-конструктора (некоторые называют статический метод)
        console.log("Hi I'm orange juice."); 
};

    
var littleJuice = new Juice(100);
var littleJuice = new Juice(100);
var littleJuice = new Juice(100);


Когда мы создаем объекты littleJuice, в них закладывается цена и методы apple, для всего этого выделяется память.

Когда мы создали метод banana, он прописался один раз в прототипе Juice, для него выделилась 1 раз место для памяти, и больше он "не размножается".

А что быть с orange? Что такое метод-конструктора, для чего он нужен?
Он "размножается" с объектами или нет? Если нет, то зачем нужны прототипы если проблема "размножения" может решаться методами-конструктора или не может)) ?
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
john36allTa
@john36allTa
alien glow of a dirty mind
Таким образом вы сделали статичную функцию orange (public static orange), вызвать которую можно лишь как Juice.orange() и из этой функции у Вас нет доступа к экземпляру конечно же, на вашем языке "не размножается с объектами".
function Juice(kind, price){
   let kind = kind; // это будет приватным свойством
   this.price = price; // публичное свойство
   this.kind = () => kind; //это публичный метод
   this.hello = function(){
      console.log(`Thats ${kind} juice`)
   }
}
Juice.prototype.world = function(){
   //приватное свойство kind тут не доступно, потому обратимся к публичному методу
   console.log(`Juice kind: ${this.kind()}`)
}
// шаблон "фабрика"
Juice.apple = ( price ) => new Juice('apple', price);
Juice.orange = ( price ) => new Juice('orange', price);

let littleAppleJuice = Juice.apple(100),
   hugeBananaJuice = new Juice('banana', 500);
littleAppleJuice.hello();
littleBananaJuice.world();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы