Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
z-z
170 / 169 / 56
Регистрация: 22.06.2011
Сообщений: 980
1

Зачем назначать конструктор прототипу?

25.01.2015, 16:26. Показов 1293. Ответов 4
Метки нет (Все метки)

Здравствуйте.

Читая статью, увидел кусок кода, который немного не понятен:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
function Circle(size, color){
    this.size = size;
    this.color = color;
}
 
Circle.prototype = {
 
    constructor: Circle
 
    //...
 
}
Зачем такое делать? Ведь, на сколько я понимаю, функция Circle уже является конструктором какого-то объекта. Зачем еще вторая часть кода?

И почему не написать все методы и свойства внутри самой функции?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2015, 16:26
Ответы с готовыми решениями:

Обращение к прототипу
Не удалось проверить работу метода экземпляра и вывести значение св-ва ф-ии конструктора....

Зачем нужен конструктор?
Всем доброго дня. Ребят такая проблема объясните мне на пальцах для чего нужен конструктор в...

Зачем делать конструктор публичным?
Я создал пакет. В этом пакете объявил публичный класс. Зачем, чтобы создать объект этого класса в...

Зачем возвращать конструктор копирование?
Добрый день. Первый вопрос в заголовке темы. Второй - где это можно применить. Спасибо. ...

4
35 / 35 / 26
Регистрация: 27.05.2012
Сообщений: 204
25.01.2015, 18:13 2
Конструктором любой функции является "Function", а конструктором объекта- функция.
В данном примере конструктор функции заменяется на саму функцию "Circle". Скорее всего это связано с безопасностью, но этого я утверждать не могу.
0
635 / 522 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
25.01.2015, 19:18 3
При создании своего прототипа свойство constructor будет указывать не на Circle...поэтому чтобы эта связь не терялась создается новое одноименное свойство в прототипе

Добавлено через 51 минуту
Ссылка на конструктор затерта новым объектом:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
function Circle(size, color){
        this.size = size;
        this.color = color;
    }
 
    Circle.prototype = {
        //constructor: Circle
    }
 
    var circle = new Circle(1,1);
 
    console.log(circle.constructor); // function Object() { [native code] }
В конструкторе в данном случае находится ссылка на вновь созданный объект Circle.prototype = {};

А вот так будет работать как и ожидалось:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function Circle(size, color){
        this.size = size;
        this.color = color;
    }
 
    Circle.prototype = {
        constructor: Circle
    }
 
    var circle = new Circle(1,1);
 
    console.log(circle.constructor);
    /*function Circle(size, color){
        this.size = size;
        this.color = color;
    }*/
Теперь все ок - сохранили ссылку на конструтор - constructor: Circle
Цитата Сообщение от z-z Посмотреть сообщение
И почему не написать все методы и свойства внутри самой функции?
Если указывать все методы непосредственно как свойство конструктора, то при каждом создании нового экземпляра объекта эти методы будут создаваться заново, что негативно сказывается на производительности (потреблении памяти).
1
z-z
170 / 169 / 56
Регистрация: 22.06.2011
Сообщений: 980
25.01.2015, 19:30  [ТС] 4
vovandr, проверил в консоли, если заменить конструктор, то в консоль выводится не Object{...}, а на много более удобный Circle{...}. В общем суть вроде бы понял, спасибо =)
0
635 / 522 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
25.01.2015, 19:32 5
Цитата Сообщение от z-z Посмотреть сообщение
проверил в консоли, если заменить конструктор, то в консоль выводится не Object{...}, а на много более удобный Circle{...}
Все верно ссылка на ваш конструктор Circle
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2015, 19:32

Список инициализации в конструктор C++11. Зачем?
Обьясните зачем в с++11 сделали возможность инициализировать данные м помощью списка {} ? было вот...

Зачем нужен конструктор переноса?
Зачем нужен конструктор переноса если тоже самое можно реализовать в обычном конструкторе...

Зачем явно описывать конструктор?
Я не понимаю, зачем явно описывать конструктор. Можно ведь создать метод с принимаемыми параметрами...

Зачем нужны конструктор и деструктор класса?
вот задание: Пользовательский класс Х должен содержать необходимые элементы-данные, которые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.