Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ООП вопрос, счетчик детей (https://javascript.ru/forum/misc/34376-oop-vopros-schetchik-detejj.html)

9xakep 01.01.2013 15:44

ООП вопрос, счетчик детей
 
В общем такая задача (я ее сделал, но с другом думаем, как лучше)

У меня есть башня, которая стреляет, каждый новый снаряд - это новый ребенок конструктора Shoot();

Мой вариант:

как посчитать количество детей у родителя
function a() {
  a.prototype.chet += 1; // Каждое рождение увеличиваем его
}
a.prototype.chet = 0; // Создаем свойство в прототипе родителя

var b = new a()
var c = new a()

alert(a.prototype.chet) // 2


Его:

var bullets = []
bullets.push(new Shoot())


Я понимаю, что мой не красивый, но какая разница, что так я создаю объект, что так

Dim@ 01.01.2013 16:30

9xakep,
может сделать подобие твоего варианта, только не в прототип мешать (кстати у любого экземпляра можно будет помотреть кол-во родившихся снарядов), а использовать св-о класса, прямо как у класса Date?:)

9xakep 01.01.2013 16:39

Цитата:

Сообщение от Dim@
(кстати у любого экземпляра можно будет помотреть кол-во родившихся снарядов)

только если через __proto__

Цитата:

Сообщение от Dim@
а использовать св-о класса, прямо как у класса Date?

Какого еще класса? О_о
И что там используется, как у меня?

Hekumok 01.01.2013 16:52

Цитата:

Сообщение от 9xakep
Цитата:

Сообщение от Dim@
а использовать св-о класса, прямо как у класса Date?:)

Какого еще класса? О_о

Я думаю это
function A() {
A.chet += 1 ; 
} ;
A.chet = 0 ;
new A() ;
new A() ;
alert(A.chet)

9xakep 01.01.2013 17:11

Hekumok,
А ясно ,спасибо
Дима при чем тут класс? В js объекты так то

godofjavascript 01.01.2013 18:47

Цитата:

Сообщение от 9xakep
только если через __proto__

нубик ты наш, получить прототип можно примерно так

var q = new Cat;

q.constructor.prototype === __proto__

9xakep 01.01.2013 19:01

godofjavascript,
Я и так знаю, что обращениек прототипу конструктора есть __proto__

Dim@ 01.01.2013 23:29

9xakep,
через __proto__? да неужто :)
function a() {
  a.prototype.chet += 1; // Каждое рождение увеличиваем его
}
a.prototype.chet = 0; // Создаем свойство в прототипе родителя

var b = new a()
var c = new a()

alert(b.chet) // 2
alert(c.chet) // 2

Hekumok правильно выразил мою мысль, в примере Hekumok-а такие св-а называются статическими св-ми класса (мы же используем классы) :)

9xakep 02.01.2013 01:21

function A() {
A.prototype.chet += 1
}
A.prototype.chet=0;
var b = new A();
alert(b.__proto__.chet)

Dim@ 02.01.2013 13:46

9xakep,
Цитата:

Сообщение от 9xakep
только если через __proto__

я показал что можно без прото

9xakep 02.01.2013 19:05

Dim@,
эпик фейспалм

То что ты написал, вначале ищет в самом ребенке, потом в его прототипе, потом в прототипе родителя. Так что моё плюс ко всему работает быстрее, потому что не ищет

Dim@ 02.01.2013 21:03

9xakep,
только про скорость не нужно гнать, надо быть реалистами, что тот что этот способ будет по скорости не замечен, так что это не минус

godofjavascript 02.01.2013 23:32

кэп подсказывает что количество детей это статическое свойство класса, а статические свойства хранятся в конструкторе

function Bullet (){
    Bullet.count ++
}

Bullet.count = 0;


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

даже ни создав ни одной пули.

tenshi 03.01.2013 00:07

на самом деле "его" способ более правильный, так как в последствии велика вероятность, что считать надо будет не все инстансы пуль, а например:
а) отдельно для каждого стрелка
б) только те, что летят, но не те, что находятся в "пуле пуль" (дабы не создавать и не уничтожать объекты лишний раз)
в) отдельно пули каждого вида
и тп

9xakep 03.01.2013 00:24

tenshi,
Его чья?

godofjavascript 03.01.2013 04:51

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

Dim@ 03.01.2013 10:19

godofjavascript,
ну то что предложил ты я как раз вначале предложил

Dim@ 03.01.2013 10:32

9xakep,
а у тебя я что-то тупанул, добавлять через прототип этой твой способ, а не мой
Цитата:

Сообщение от Dim@
(кстати у любого экземпляра можно будет помотреть кол-во родившихся снарядов)

Цитата:

Сообщение от 9xakep
только если через __proto__

Цитата:

Сообщение от Dim@
9xakep,
через __proto__? да неужто
function a() {
  a.prototype.chet += 1; // Каждое рождение увеличиваем его 
}      
a.prototype.chet = 0; // Создаем свойство в прототипе родителя
var b = new a()
var c = new a()
alert(b.chet) // 2
alert(c.chet) // 2

Цитата:

Сообщение от 9xakep
эпик фейспалм

и где тут эпик фейспалм?:blink:

Цитата:

Сообщение от Dim@
только про скорость не нужно гнать, надо быть реалистами, что тот что этот способ будет по скорости не замечен, так что это не минус

вот здесь тупанул ведь обсуждался твой способ и то что ты писал как раз к твоему способу относится (а __proto__ не всеми браузерами поддерживается);)

tenshi 03.01.2013 12:18

Цитата:

Сообщение от 9xakep (Сообщение 224893)
tenshi,
Его чья?

..
Цитата:

Сообщение от 9xakep (Сообщение 224691)
Мой вариант:

как посчитать количество детей у родителя
function a() {
  a.prototype.chet += 1; // Каждое рождение увеличиваем его
}
a.prototype.chet = 0; // Создаем свойство в прототипе родителя

var b = new a()
var c = new a()

alert(a.prototype.chet) // 2


Его:

var bullets = []
bullets.push(new Shoot())


tenshi 03.01.2013 12:21

Цитата:

Сообщение от godofjavascript (Сообщение 224919)
tenshi,
пули выпущенные стрелком будет стрелок считать.

это очевидно, но обсуждаемый тут способ будет считать дополнительно и никому уже не нужное общее число пуль.


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