Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разбираем AjaxOOP (https://javascript.ru/forum/misc/12756-razbiraem-ajaxoop.html)

Kolyaj 02.11.2010 08:53

eai,
не порите чушь. Считать википедию авторитетным источником, как минимум, глупо. В объектно-ориентированном программировании базовое понятие объект, а не класс.

Я вас прекрасно понимаю, не вы первый, кто переходит с классовых языков на JavaScript. Но не надо быть таким упёртым, почитайте статьи на этом сайте, почитайте очень хорошие статьи Дмитрия Сошникова (раз, два), а потом уже беритесь делать очередной никому не нужный костыль, имитирующий классовое ООП там, где его нет и не надо.

eai 02.11.2010 09:39

Коля
1. Я не порю чушь, так как это не я сослался на вики
2. В ООП важно не объект а наследование, полиформизм и.т.д
Нельзя же считать "С" с его структурами ООП языком.
3. Я не перехожу на JavaScript я использую JavaScript.
4. И Раз и Два я читал, извините поиском умею пользоваться.
5. Давай те будем как то по корректнее!
6. не понимаю почему тема сводиться к перепалки без обсуждения сути вопроса

Kolyaj 02.11.2010 09:48

Цитата:

Сообщение от eai
это не я сослался на вики

Вы сослались на фразу из неё.

Цитата:

Сообщение от eai
2. В ООП важно не объект а наследование, полиформизм и.т.д

Что из этого нет в JavaScript? И что вам мешает "нативно использовать ООП в нём"?
Цитата:

Сообщение от eai
Однако как я заметил и заметили другие члены сообщества в разных местах в интернете, нет , как бы это яснее выразиться ..., нативной что ли возможности использовать это.


eai 02.11.2010 10:04

Цитата:

Сообщение от Kolyaj (Сообщение 76997)
Вы сослались на фразу из неё.

Что из этого нет в JavaScript? И что вам мешает "нативно использовать ООП в нём"?

Я сослался только потому, что Владлен мне мне указал что на эту статью. В ответ на его ссылку я указал что в этой ссылке содержится абзац, где указано обратное.

Мешает то что, что надо делать так
var F = function() { }
F.prototype = Parent.prototype
Child.prototype = new F()
Child.prototype.constructor = Child
Child.superclass = Parent.prototype

и еще по всякому

и еще, я не говорю что JS плохой там или еще как. Просто он иной нежели например C++. И я пытаюсь использовать JS с принципами построения приложений ООП и не более. Всю тему я поднял, только для того что бы убедиться что я на верном или не верном пути проводя реинжениринг кода из AjaxOOP.

Kolyaj 02.11.2010 10:20

Цитата:

Сообщение от eai
Мешает то что, что надо делать так

Ну так это 5 строк кода, которые выносятся в отдельную функцию, вы же почему-то вместо этих пяти хотите сотню понаписать.

Цитата:

Сообщение от eai
И я пытаюсь использовать JS с принципами построения приложений ООП и не более.

С принципами построения приложений на С++, вы хотели сказать? А то из ваших слов ненавязчиво следует, что в С++ единственный рассово верный ООП.

Цитата:

Сообщение от eai
для того что бы убедиться что я на верном или не верном пути проводя реинжениринг кода из AjaxOOP.

Если подразумевается, на верном ли вы пути, что вообще взялись за 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;
};
Она не добавляет никаких новых сущностей в язык, она просто упрощает создание и наследование конструкторов.

eai 02.11.2010 10:31

Цитата:

Сообщение от Kolyaj (Сообщение 76999)
Ну так это 5 строк кода, которые выносятся в отдельную функцию, вы же почему-то вместо этих пяти хотите сотню понаписать.

Может я и не прав, меня в этой библиотеке подкупил, тот синтаксис который я смогу использовать далее.

Цитата:

Сообщение от Kolyaj (Сообщение 76999)
С принципами построения приложений на С++, вы хотели сказать? А то из ваших слов ненавязчиво следует, что в С++ единственный рассово верный ООП.

Я такого не говорил :-) Однако признаю что синтаксис С++ мне нравиться.

Цитата:

Сообщение от Kolyaj (Сообщение 76999)
Если подразумевается, на верном ли вы пути, что вообще взялись за 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;
};
Она не добавляет никаких новых сущностей в язык, она просто упрощает создание и наследование конструкторов.

Вау, а можно пример использования ?

Kolyaj 02.11.2010 10:42

Цитата:

Сообщение от eai
меня в этой библиотеке подкупил, тот синтаксис который я смогу использовать далее.

Синтаксис не важен, важна семантика. А она как раз в подобных библиотеках тщательно скрывается, а вместо неё выпирает несуществующая.


Цитата:

Сообщение от eai
а можно пример использования ?

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();

eai 02.11.2010 10:48

Беру таймот на разбор :-)
Спасибо

P.S.
Обдумал выпад на счет C++. Да я хочу статическую классовую модель, а поскольку это низя, то хочу максимально приближенное.

x-yuri 02.11.2010 12:14

а Алан Кей думал по-другому :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

eai 02.11.2010 12:17

А мне страуструп ближе


Часовой пояс GMT +3, время: 14:52.