Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объект внутри прототипа (https://javascript.ru/forum/misc/43350-obekt-vnutri-prototipa.html)

kobezzza 02.12.2013 22:21

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 284134)
почему ты не пишешь так? круче же смотрится, да и логичнее.

var Module = new function(){


};

У меня в голове нездоровая ассоциация с new, как с созданием нового инстанса, мне твой способ менее очевиден, дело привычки.

Maxmaxmaximus3 02.12.2013 22:30

ты создаешь новый инстанс модуля тип) типа не прост функция какая то а обьект возвращает, и это модуль, у меня так, у тя не?

или ты сразу думаешь раз new значит есть какой-то класс? и что же это за класс? - да?

kobezzza 02.12.2013 22:32

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 284136)
или ты сразу думаешь раз new значит есть какой-то класс? и что же это за класс? - да?

Угу, дело в том, что ОО подход я осваивал в C# и ActionScript3, так уж сложилось:)
Но скоро мы получим православный встроенный синтаксис модулей и всё будет хорошо!

jsru_ 02.12.2013 22:54

...

kobezzza 02.12.2013 23:05

Цитата:

Сообщение от jsru_ (Сообщение 284138)
все правильно, ты кинул ссылку на пример композиции, но то, что ты написал это не композиция :no:

Это ещё почему? Ты троллишь чтоли? У нас есть объект, у него есть свойство - другой объект, который является делегатом, а исходный объект делегирует ему свои обязанности и вместе они образуют композицию. Приведи хоть один аргумент подтверждения своих слов или признай, что ошибся.

Цитата:

Данное отношение объектов называется “has-a”, т.е. “имеет внутри себя” – в отличии от наследования – “is-a” – “является (наследником)”.
function Base() {
    this.sub = new Sub();
}

Base.prototype.sub = null;

function Sub() {
}


Base содержит в себя Sub и можете делегировать ему свои обязанности, а фабрикой - это вообще из другой оперы.

function Base() {
    this.sub = new Sub();
}

Base.prototype.sub = null;

Base.prototype.foo = function () {
    return this.sub.foo();
};

function Sub() {
}

Sub.prototype.foo = function () { alert('foo!'); }

new Base().foo();

jsru_ 02.12.2013 23:14

...

kobezzza 02.12.2013 23:19

Цитата:

Сообщение от jsru_ (Сообщение 284142)
композиция - это когда ты вызываешь метод на родительском классе и он вызывает рекурсивно методы всех композиций (composite), пока не дойдет до исполнителя (leaf). или ты думаешь, если ты вызываешь внутри конструктора другой конструктор, то они образуют композицию? :stop: ну как знаешь...

Композиция - это паттерн повторного использования кода, альтернатива наследованию, в частности множественному. То что ты говоришь - это делегирующее наследование.

kobezzza 02.12.2013 23:21

Цитата:

Сообщение от jsru_ (Сообщение 284142)
или ты думаешь, если ты вызываешь внутри конструктора другой конструктор

Слишком толсто. Очевидно, что я не стал расписывать, что свойство объект в конструкторе было создано с целью дальнейшего делегирования (двумя постами выше я уже привёл пример), а не с целью "вызвать конструктор в конструкторе", причём это поняли все, кроме тебя.

Цитата:

function Base() {
    this.sub = new Sub();
}

Base.prototype.sub = null;

Base.prototype.foo = function () {
    return this.sub.foo();
};

function Sub() {
}

Sub.prototype.foo = function () { alert('foo!'); }

new Base().foo();


Maxmaxmaximus3 02.12.2013 23:46

kobezzza, вот я о том и говорю, тут 1-3 человека включая тебя и меня которые шарят. при чем я самый хучший из этих троих.
Вот я например например поржал когда он про фабрику пошутил, а все бы подумали что я дурак и тупой и это рельно фабрика и что он не шутил =) вот такой тут народец

kobezzza, кстати , а в твоем примере если бы Sub должен был бы знать что-то о Base, то это означало бы что мы делаем что-то не правильно? (Так как в данном случае Subы не должны ни чего знать о Base)

kobezzza 02.12.2013 23:53

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 284153)
kobezzza, кстати , а в твоем примере если бы Sub должен был бы знать что-то о Base, то это означало бы что мы делаем что-то не правильно? (Так как в данном случае Subы не должны ни чего знать о Base)

Ну, я всегда против того, когда "вложенный" объект знает о своём родителе, но если нужно нужна провязка, то сам Бог велел использовать обсёрвер, и это будет самое разумное решение:) Вообще event-driven - это здорово, если бы порой это не было бы так запутано, поэтому и придумали FRP (но мы то знаем, что внутри всё те же события).


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