Extend через Object
Кто, что может сказать о так методе наследования
Для меня оно более лаконично выглядит
Object.prototype.extend = function(Parent) {
var F = function() { }
F.prototype = Parent.prototype
this.prototype = new F()
this.prototype.constructor = this
this.superclass = Parent.prototype
};
function Animal(name, walkSpeed) {
// объявить приватную переменную
var speed = walkSpeed
// объявить открытую переменную
this.distance = 0
// добавить метод, использующий private speed
this.walk = function(time) {
this.distance = this.distance + time*speed
}
// добавить метод, использующий private name
this.toString = function() {
return name+" на расстоянии "+this.distance
}
}
function Bird(name, walkSpeed, flySpeed) {
// вызов родительского конструктора
Bird.superclass.constructor.call(this, name, walkSpeed)
this.fly = function(time) {
this.distance = this.distance + time*flySpeed
}
}
Bird.extend(Animal);
bird = new Bird("Птыц", 1, 10)
bird.walk(3)
alert(bird) // => Птыц на расстоянии 3
bird.fly(2)
alert(bird) // => Птыц на расстоянии 23
|
Цитата:
|
Цитата:
|
Цитата:
Вот завтра Geko добавят себе в движок такой же одноименны метод, но с иным смыслом, и у тех кто будет использовать ваш код поломается весь функционал сайта. |
Ну, а если изначально делать все по такому принципу?
Иногда "гадить" в String очень выгодно. |
Можете со мной не согласится, но имхо, расширение прототипа стандартных объектов - ето не есть гуд в 90% случаев)
|
Цитата:
Object.prototype.foo = 'o_O';
alert([10..foo, {}.foo, [].foo]); // этот ахтунг будет во всех объектах
Неправда ли забавно? Object.prototype[0] = 'o_O'; alert(Array[0]); |
Цитата:
Я думаю такая реализация может иметь плюсы в определенных условиях |
А почему в прототип Object? Куда как логичнее в Function.
|
Таки да, Object.prototype тут не нужен. Вот мой вариант
https://github.com/Kolyaj/CrossJS/bl...nction.js#L105 |
Bird.extend(Animal);
если убрать эту строчку ничего не изменится |
| Часовой пояс GMT +3, время: 04:49. |