Показать сообщение отдельно
  #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
Ответить с цитированием