Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 14.03.2015, 18:52
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Но есть вопросы по реализации
Как образец можно взять реализацию из ноды/io.js, вот апи - https://iojs.org/api/events.html

Цитата:
SendToOne
Методы принято называть с маленькой буквы.

Цитата:
Читая и осваивая JavaScript, конкретно, ООП-раздел
Как закончишь, изучи и освой классы из ES6 - http://www.2ality.com/2015/02/es6-classes-final.html
ES6 пока только готовится к релизу, но им уже можно пользоваться почти на полную мощь с помощью трансляции.
Ответить с цитированием
  #12 (permalink)  
Старый 14.03.2015, 22:23
Новичок на форуме
Отправить личное сообщение для Ivan_Ivanoff_24 Посмотреть профиль Найти все сообщения от Ivan_Ivanoff_24
 
Регистрация: 14.03.2015
Сообщений: 6

Сообщение от nuboquest
Не совсем ясно из постановки, должны ли все объекты как-то реагировать на сообщения, или просто "знать" какое то состояние. Выложите задание полностью.
К сожалению, это и есть полностью( Поэтому и обратился к Вам, чтобы понять, насколько различно можно толковать его условие.

Сообщение от nuboquest
O={
        sendTo: function(obj, msg){obj.receiveFrom(this, msg)},
        receiveFrom: function(sender, msg){console.log(this.name+": I have receive the message '"+msg+"' from "+sender.name)},
 create: function(name){var o=Object.create(this); window[name]=o; o.name=name}
	}
	 
	O.create("object1")
     O.create("object2")
 
       object1.sendTo(object2, "Hello!")
 
	//  object2: I have receive the message 'Hello!' from object1
Такой вариант ближе всего к моему представлению этого процесса). Вопрос - в этом варианте объект О можно считать тем самым классом, который предоставляет возможность взаимодействовать объектам (как в условии задания) либо необходимо что-то добавлять? Заранее прошу прощения за дилетантские вопросы.
Ответить с цитированием
  #13 (permalink)  
Старый 14.03.2015, 22:30
Новичок на форуме
Отправить личное сообщение для Ivan_Ivanoff_24 Посмотреть профиль Найти все сообщения от Ivan_Ivanoff_24
 
Регистрация: 14.03.2015
Сообщений: 6

Сообщение от tsigel
В javascript нет событий если не считать Dom, но никто не мешает их эмулировать. События это объект который хронит в себе ассоциативный массив (где ключ это имя события) массив обработчиков. Это совсем не сложно.
Спасибо за ответ, и если это возможно, не могли бы Вы немного подробнее описать процесс эмуляции события? Либо посоветовать какие-то материалы на эту тему.

И, пожалуйста, расскажите хотя бы вкратце, что происходит в классе Base из Вашего примера, назначение его свойств и методов.

Благодарю!
Ответить с цитированием
  #14 (permalink)  
Старый 14.03.2015, 22:31
Новичок на форуме
Отправить личное сообщение для Ivan_Ivanoff_24 Посмотреть профиль Найти все сообщения от Ivan_Ivanoff_24
 
Регистрация: 14.03.2015
Сообщений: 6

Erolast, Благодарю за ЦУ, обязательно учту и воспользуюсь =)
Ответить с цитированием
  #15 (permalink)  
Старый 14.03.2015, 23:02
nbq nbq вне форума
Интересующийся
Посмотреть профиль Найти все сообщения от nbq
 
Регистрация: 14.03.2015
Сообщений: 10

Сообщение от Ivan_Ivanoff_24
Такой вариант ближе всего к моему представлению этого процесса). Вопрос - в этом варианте объект О можно считать тем самым классом, который предоставляет возможность взаимодействовать объектам (как в условии задания) либо необходимо что-то добавлять? Заранее прошу прощения за дилетантские вопросы.
Это класс по-сути. В нормальных ООП языках классы -- первоклассные объекты. Вопрос только в том, кто Вас будет проверять. Не у Всех есть способность воспринимать вещи без сахара.

В принципе, Вы можете добавить сахарку:

O=function(name){this.name=name}
O.prototype={
 sendTo: function(obj, msg){obj.receiveFrom(this, msg)},
 receiveFrom: function(sender, msg){console.log(this.name+": I have receive the message '"+msg+"' from "+sender.name)},
}

 
object1=new O("object1")
object2=new O("object2")
 
object1.sendTo(object2, "Hello!")
//  object2: I have receive the message 'Hello!' from object1

Тогда формально не докопаешься.

Последний раз редактировалось nbq, 14.03.2015 в 23:11.
Ответить с цитированием
  #16 (permalink)  
Старый 15.03.2015, 00:07
Новичок на форуме
Отправить личное сообщение для Ivan_Ivanoff_24 Посмотреть профиль Найти все сообщения от Ivan_Ivanoff_24
 
Регистрация: 14.03.2015
Сообщений: 6

nbq, спасибо огромное! Заодно подробнее ознакомился с prototype и увидел, как можно красивее "завернуть" туда функционал.
Ответить с цитированием
  #17 (permalink)  
Старый 15.03.2015, 00:49
Новичок на форуме
Отправить личное сообщение для Ivan_Ivanoff_24 Посмотреть профиль Найти все сообщения от Ivan_Ivanoff_24
 
Регистрация: 14.03.2015
Сообщений: 6

Сообщение от nuboquest Посмотреть сообщение
Ivan_Ivanoff_24,
может быть паттерн "наблюдатель" (observer) имеется в виду?
Прочитал про данный паттерн и понял, что вполне возможно, это тоже может являться одним из приемлемых вариантов. Опять-таки, жаль, что нет никаких уточняющих моментов, понимание задачи дали на откуп мне самому =) Пока тяжело понять, как реализовать эту задачу с применением этого паттерна(
Ответить с цитированием
  #18 (permalink)  
Старый 15.03.2015, 08:29
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
O=function(name){this.name=name}
O.prototype={
sendTo: function(obj, msg){obj.receiveFrom(this, msg)},
receiveFrom: function(sender, msg){console.log(this.name+": I have receive the message '"+msg+"' from "+sender.name)},
}


object1=new O("object1")
object2=new O("object2")

object1.sendTo(object2, "Hello!")
// object2: I have receive the message 'Hello!' from object1
Только
  1. Начиная с ES5, переменные без var объявлять запрещено, в строгом режиме код не заработает.
  2. Добавление методов реализовано неверно: во-первых, у прототипа класса должно быть свойство constructor, ссылающееся на сам класс (так и есть по умолчанию, но здесь оно перезаписано); во-вторых, все свойства прототипа должны быть неперечисляемы:
    function defineMethod(target, name, value) {
        Object.defineProperty(target.prototype, name, {
            value: value,
            enumerable: false
        })
    }
    
    function Animal() {
      this.speed = 0;
    }
    defineMethod(Animal, "run", function() {
      this.speed++;
    });
    
    (new Animal()).run();
    
  3. have recieved
Ответить с цитированием
  #19 (permalink)  
Старый 16.03.2015, 12:37
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Сообщение от Ivan_Ivanoff_24 Посмотреть сообщение
Спасибо за ответ, и если это возможно, не могли бы Вы немного подробнее описать процесс эмуляции события? Либо посоветовать какие-то материалы на эту тему.

И, пожалуйста, расскажите хотя бы вкратце, что происходит в классе Base из Вашего примера, назначение его свойств и методов.

Благодарю!
Объект Base служит как базовый класс, от которого наследуются мои объекты получая возможность слушать и генерировать события.
Он имеет 3 метода:
1) bind - подписываемся на события. Он принимает либо собыитие и обработчик, либо объект, в котором ключ - это имя события, а значение - обработчик. Пример использования:

new Base().bind("some event", function handler() {...});
  new Base().bind({
    "some event 1": function handler1() {...},
    "some event 2": function handler2() {...}
  });


2) unbind - отписываемся от событий.

var baseExtended = ... //объект с подписанными обработчиками.

   baseExtended.unbind() // снимет все обработчики со всех событий объекта

   baseExtended.unbind("event") // снимет все обработчики с именем события "event";

   baseExtended.unbind("event", handler) // снимит конкретный обработчик который равен передаваемой функции (как removeEventListener)


3) - trigger - метод который запускает события (1-й аргумент - имя события, второй массив аргуметов которые придут в функции - слушатели);

baseExtended.trigger("event", [baseExtended]) // запускаем событие "event", всем слушателям придет первым аргументом автор события
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книжко по ООП krasovsky Учебные материалы 2 03.04.2013 12:50
Помогите с ооп Zim_one Общие вопросы Javascript 8 18.11.2012 00:11
ООП в javascript iostream21 Общие вопросы Javascript 11 12.07.2012 00:16
Есть ли смысл использовать ООП. Duda.Ml1986@gmail.com Оффтопик 18 18.02.2012 21:47
ООП PHP вопрос mycoding Серверные языки и технологии 9 03.06.2010 02:57