eai,
не порите чушь. Считать википедию авторитетным источником, как минимум, глупо. В объектно-ориентированном программировании базовое понятие объект, а не класс. Я вас прекрасно понимаю, не вы первый, кто переходит с классовых языков на JavaScript. Но не надо быть таким упёртым, почитайте статьи на этом сайте, почитайте очень хорошие статьи Дмитрия Сошникова (раз, два), а потом уже беритесь делать очередной никому не нужный костыль, имитирующий классовое ООП там, где его нет и не надо. |
Коля
1. Я не порю чушь, так как это не я сослался на вики 2. В ООП важно не объект а наследование, полиформизм и.т.д Нельзя же считать "С" с его структурами ООП языком. 3. Я не перехожу на JavaScript я использую JavaScript. 4. И Раз и Два я читал, извините поиском умею пользоваться. 5. Давай те будем как то по корректнее! 6. не понимаю почему тема сводиться к перепалки без обсуждения сути вопроса |
Цитата:
Цитата:
Цитата:
|
Цитата:
Мешает то что, что надо делать так
var F = function() { }
F.prototype = Parent.prototype
Child.prototype = new F()
Child.prototype.constructor = Child
Child.superclass = Parent.prototype
и еще по всякому и еще, я не говорю что JS плохой там или еще как. Просто он иной нежели например C++. И я пытаюсь использовать JS с принципами построения приложений ООП и не более. Всю тему я поднял, только для того что бы убедиться что я на верном или не верном пути проводя реинжениринг кода из AjaxOOP. |
Цитата:
Цитата:
Цитата:
Мне, например, по всем критериям хватает для организации наследования функции на 10 строк.
/**
* Создаёт конструктор, прототип которого наследует прототип текущего конструктора.
* Для создания ничего не наследующего конструктора следует использовать Object.inherit({...}).
* @param {Object} proto Объект с методами и свойствами, копирующимися в прототип создаваемого конструктора.
* @return {Function} Созданный конструктор.
*/
Function.prototype.inherit = function(proto) {
var that = this;
proto = proto || {};
var constructor = proto.hasOwnProperty('constructor') ? proto.constructor : function() { that.apply(this, arguments); };
var F = function() {};
F.prototype = this.prototype;
constructor.prototype = apply(new F(), proto);
constructor.superclass = this.prototype;
constructor.prototype.constructor = constructor;
return constructor;
};
Она не добавляет никаких новых сущностей в язык, она просто упрощает создание и наследование конструкторов. |
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
function apply(dst) {
for (var i = 1; i < arguments.length; i++) {
for (var prop in arguments[i]) {
if (arguments[i].hasOwnProperty(prop)) {
dst[prop] = arguments[i][prop];
}
}
}
return dst;
}
Function.prototype.inherit = function(proto) {
var that = this;
proto = proto || {};
var constructor = proto.hasOwnProperty('constructor') ? proto.constructor : function() { that.apply(this, arguments); };
var F = function() {};
F.prototype = this.prototype;
constructor.prototype = apply(new F(), proto);
constructor.superclass = this.prototype;
constructor.prototype.constructor = constructor;
return constructor;
};
var A = Object.inherit({
constructor: function(a) {
this.a = a;
},
method: function() {
alert(this.a);
}
});
var B = A.inherit({
constructor: function() {
B.superclass.constructor.apply(this, arguments);
this.a++;
}
});
var a = new A(5);
var b = new B(5);
a.method();
b.method();
|
Беру таймот на разбор :-)
Спасибо P.S. Обдумал выпад на счет C++. Да я хочу статическую классовую модель, а поскольку это низя, то хочу максимально приближенное. |
а Алан Кей думал по-другому :blink:
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." The big idea is "messaging" -- that is what the kernal of Smalltalk/Squeak is all about (and it's something that was never quite completed in our Xerox PARC phase). The Japanese have a small word -- ma -- for "that which is in between" -- perhaps the nearest English equivalent is "interstitial". http://www.c2.com/cgi/wiki?AlanKayOnObjects |
А мне страуструп ближе
|
| Часовой пояс GMT +3, время: 10:39. |