15.03.2015, 08:29
|
|
Профессор
|
|
Регистрация: 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
|
Только - Начиная с ES5, переменные без var объявлять запрещено, в строгом режиме код не заработает.
- Добавление методов реализовано неверно: во-первых, у прототипа класса должно быть свойство 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();
- have recieved
|