g1er / Andrew

0 stars 0 forks source link

Конструкторы #7

Closed IgorKulishov closed 6 years ago

IgorKulishov commented 6 years ago

Конструкторы

Конструкторы - как способ унаследования свойств и методов объектов.

Представим в качестве примере что у нас есть пустой образец трудового договора и нам надо создать и заполнить графы для разных профессий - мы можем создать сначала конструктор и использовать его как образец и далее использовать его в качестве темплейта и заполнить новые объекты для каждой професии уже со специфическими свойствами.

Рекомендую прочитать "Конструкторы" статью с книги: https://habrahabr.ru/post/241587/

Приведу примеры похожие с книги (только рабочий вместо кролика).

Конструктор это ф-ция, которая имеет несколько встроенных свойств и методов которые будут иметь унаследованные новые объекты. Каждое своейство объекта или его метод описывается при помощи слова "this". Коструктор не используется сам по себе, а обычно служит для генерации других объекторв при помощи слова new поставленного перед конструктором.

// сначала создадим конструктор 
function Employee(type, activity) {
    this.type = type;
    this.activity = function() {
        console.log(this.type + ' does : ' + activity)
    }
}

// создадим/сгенерируем новые объекты
var constructionWorker = new Employee('construction', 'build roof');
//read results of property **type**
constructionWorker.type;
//read results of method **activity**
constructionWorker.activity();
IgorKulishov commented 6 years ago

Создай и добавь свой пример рабочего на базе конструктора. Так же можешь создать свой пример конструктора. Я сознательно не объясняю тебе тему про prototype. Объясню после выполнения задания.

g1er commented 6 years ago

Ну, вот, например, создал по своей стихии такой конструктор:

function Swimmer(style, distance) {
    this.style = style;
    this.distance = function() {
        console.log("This swimmer prefer " + distance + " " + this.style)
    }
}

var bflySwimmer = new Swimmer("butterfly", "200");
bflySwimmer.style;
bflySwimmer.distance();

Только одну вещь не совсем понял. Если я убираю предпоследнюю строку bflySwimmer.style, то результат у меня выходит такой же, как если я эту строку оставлю. В чем тогда ее предназначение?

g1er commented 6 years ago
function Country(c_name, options) {
    this.c_name = c_name;
    this.options = function() {
        console.log(this.c_name + " is " + options + " than WADA & IOC sanctions!")
    }
}

var country_1 = new Country("Russia", "much stronger");
country_1.c_name;
country_1.options();
IgorKulishov commented 6 years ago

Ответ:

Дело в том что новый объект создаётся (вместе со свойствами и методом) вот в этой строке:

var bflySwimmer = new Swimmer("butterfly", "200");

А в последней и предпоследней строках мы просто обращаемся и читаем свойство и метод объекта bflySwimmer (т.е. не важно мы выводим свойства на печать или нет значение свойств и метода уже определено). Мы можем заменить две последние строчки на одну: bflySwimmer; В этом случае ты увидешь все свойства объекта.

g1er commented 6 years ago

Ну, примерно понятно. И еще один вопрос. Получается, что, создавая конструктор Swimmer я могу задать в скобках любые свойства и методы (style, distance, age, speed, sportswear, .......) и в любом количестве тех и других (2 свойства и 3 метода, или 5 свойств и 1 метод и т.д.) и потом определить их внутри для дальнейшего создания объектов?

IgorKulishov commented 6 years ago

Да, совершенно верно. Мы вначале создаем конструктор(ы) с любым набором свойств и методов и далее используем этот конструктор(ы) как лекало для создания одного или множества объектов на основе этих/этого конструктора(ов), подставляя слово new перед конструктором и подставляя значения аргументов в конструктор(ов).

IgorKulishov commented 6 years ago

В объектно-ориентированных языках таких как Java/C# создание класса (конструктора) является основным правилом: 1) т.е. мы вначале создаем классы (CarDeatails, ProductDescription, CookingInstruction и т.д.) в каждом их которых мы определяем набор свойств и методов определяющих набор будующего объекта (переменной). 2) Далее мы создаем новые объекты (переменные) с набором свойств определенных в классах (конструкторах) подставляя слово new перед конструктором и подставляя значения аргументов в классы (конструктор(ов)).

IgorKulishov commented 6 years ago

Да совершенно верно

On Feb 13, 2018 03:41, "g1er" notifications@github.com wrote:

Ну, примерно понятно. И еще один вопрос. Получается, что, создавая конструктор Swimmer я могу задать в скобках любые свойства и методы (style, distance, age, speed, sportswear, .......) и в любом количестве тех и других (2 свойства и 3 метода, или 5 свойств и 1 метод и т.д.) и потом определить их внутри для дальнейшего создания объектов?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/g1er/Andrew/issues/7#issuecomment-365188768, or mute the thread https://github.com/notifications/unsubscribe-auth/AF43aMoeWVDPIh4Aqbbd4vMCngmk9M6uks5tUUq3gaJpZM4SBtHd .