Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как граматно создать конструктор (https://javascript.ru/forum/misc/52088-kak-gramatno-sozdat-konstruktor.html)

tsigel 03.12.2014 18:11

kostyanet,
Разница в экономии памяти. У вас функция будет создана для каждого экземпляра, уу меня у каждого экземпляра будет ссылка на функцию из прототипа.

Эх, долго писал :(

kostyanet 03.12.2014 18:14

Цитата:

Сообщение от Siend
у меня сейчас можно сказать что существует уже 1 палитра с кучей переменных и функций их обработки, а хочу я чтобы для каждого canvas своя палитра создавалась, со своими переменными и функциями.

var vasya = new SomeConstructor('vasya');
vasya.getName();
// vasya

но лично мне эта хрень с this'ами не нравится. Это голимые публичные проперти. Смысла в getName() ровно 0, ибо vasya.name дает то же самое. Ну, понятно что в методе может быть что-то посложнее, но все равно нормальный класс должен иметь внутренности и интерфейс.

kostyanet 03.12.2014 18:16

tsigel,

Ясно, спасибо.

jsnb 03.12.2014 18:16

Цитата:

Сообщение от kostyanet
Это голимые публичные проперти.

Никто не мешает прятать приватные в замыкания.

krutoy 03.12.2014 18:18

Цитата:

Сообщение от kostyanet
Смысла в getName() ровно 0, ибо vasya.name дает то же самое.

a=1

Смысла в пременной a нет, ибо 1 дает то же самое

tsigel 03.12.2014 18:18

Цитата:

Сообщение от kostyanet
Это голимые публичные проперти.

Никто не мешает писать приватные методы начиная с "_" и писать JSDoc, тогда IDE сама будет показывать что можно трогать а что нет. В данном случае я писал это просто как пример.

kostyanet 03.12.2014 18:19

Теперь такой вопрос, я тоже нуждаюсь. Цитата:

SomeConstructor.prototype.getName = function () {
  return this.name;
};
SomeConstructor.prototype.addAge = function () {
  return this.age++;
};
SomeConstructor.prototype.addFriends = function (friend) {
  return this.friends.push(friend);
};


конец цитаты. Это все можно собрать в один прототип который типа класс, и, затем от него все эти методы наследовать через какой-то шланг в конкретном объекте?

krutoy 03.12.2014 18:22

Цитата:

Сообщение от kostyanet
Это все можно собрать в один прототип который типа класс, и, затем от него все эти методы наследовать через какой-то шланг в конкретном объекте?

они и так наследуются. Твоего кода достаточно, больше них*я н надо для этого
Или ты хочешь суперкласс создать?

danik.js 03.12.2014 18:25

Цитата:

Сообщение от jsnb
Никто не мешает прятать приватные в замыкания.

Как? Чтобы у методов был к ним доступ.

tsigel 03.12.2014 18:25

kostyanet,
Да

var SomeConstructor = function(name, age) {
  this.name = name;
  this.age = age;
};
SomeConstructor.prototype.getName = function () {
  return this.name;
};
SomeConstructor.prototype.addAge = function () {
  return this.age++;
};

var SomeChild = function () {
  SomeConstructor.apply(this,arguments)
};
SomeChild.prototype = Object.create(SomeConstructor.prototype);
SomeChild.constructor = SomeChild;

SomeChild.prototype.childMethod = function () {
  return true;
}

var child = new SomeChild("child", 20);

alert(JSON.stringify(child, "", 4));
alert(child.childMethod());


Часовой пояс GMT +3, время: 06:12.