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

eai 02.11.2010 17:01

И так разбор библиотечки Коли.

Создание объектов до отказа браузера.
Результат хороший.
Хром(лучший результат) создал 17 миллионов объектов.
При этом увеличение количества методов не повлияло на результат.
Вывод, тело методов не плодиться для каждого экземпляра в отдельности. И это правильно товарищи :)

eai 02.11.2010 17:12

Создаем объекты без наследования (от Object не считается)
var Point = Object.inherit({
     x: 0, // что то вроде значения по умолчанию
     y: 0, // что то вроде значения по умолчанию
    constructor: function(ax,ay) {
        this.x = ax;
        this.y = ay;
    },
    toString: function(){
		return "(x=" + this.x + " y=" + this.y + ")";
    }
});

Работает!
Вообще если уж сравнивать с C++ то присвоение свойств объекта в момент объявления это не есть правильно. Однако это полезная фича (на мой взгляд), тем более что у нас ситуация когда присваивание и есть объявление. Так мы имеем возможность присваивать значение свойств по умолчанию.


Усложняем
var Point = Object.inherit({
        a: new Array(2),
    constructor: function(ax,ay) {
        this.a[0] = ax;
        this.a[1] = ay;
    }
});

Не работает. Вернее работает, но свойство а ведет себя как статическое свойство. Иными словами оно общее для всех экземпляров "класса" Point.
Посему заповедь. Хочешь свойство сложного типа, создавай его в конструкторе.
var Point = Object.inherit({
        a: null, //вообще без этой строчки можно обойтись, но выглядит красивым объявлением
    constructor: function(ax,ay) {
        this.a = new Array(2);
        this.a[0] = ax;
        this.a[1] = ay;
    }
});


Кстати, а можно ли с помощью этой библиотеки создавать статические свойства простых типов?

Kolyaj 02.11.2010 17:29

Цитата:

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

Это по коду видно :)

Цитата:

Сообщение от eai
Кстати, а можно ли с помощью этой библиотеки создавать статические свойства простых типов?

Присваивайте свойствам самого конструктора.

eai 02.11.2010 17:31

Типа так
Point.someProperty = ' I am static property'
?


Завтра начну тестировать наследование и перегрузку методов.

Kolyaj 02.11.2010 17:32

Да.

x-yuri 03.11.2010 02:36

Цитата:

Сообщение от eai
Не работает. Вернее работает, но свойство а ведет себя как статическое свойство. Иными словами оно общее для всех экземпляров "класса" Point.

все, что попадает в прототип - общее для всех экземпляров... до поры до времени ;)
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 Point = Object.inherit({
        a: new Array(2),
    constructor: function(ax,ay) {
        this.a[0] = ax;
        this.a[1] = ay;
    }
});

// ---

var a = new Point(1, 2);
var b = new Point(3, 4);
alert(a.a.concat(b.a));
a.a = [5, 6];
alert(a.a.concat(b.a));

x-yuri 03.11.2010 08:17

кстати, неплохая статья по теме
http://rainman-rocks.livejournal.com/67138.html
в частности, "динамические системы программирования созданы для иных целей, нежли статические, и не должны пытаться копировать подходы статических систем" или не надо писать на javascript, как будто это C++. Ничего хорошего не получится ;)

monolithed 03.11.2010 09:38

Так сказать из уст пионера в поисках истины ООП в JavaScript
Classical Inheritance in JavaScript
Prototypal Inheritance in JavaScript
Private Members in JavaScript

eai 03.11.2010 10:10

Цитата:

Сообщение от x-yuri (Сообщение 77152)
кстати, неплохая статья по теме
http://rainman-rocks.livejournal.com/67138.html

В статье позабавило
PHP и Perl устроены иначе, поэтому (и не только поэтому) они - плохие языки

Плохой язык не тот который поэтому (и не только по этому) а тот который не соответствует следующему выводу в той же статье


разработка на динамических языках должна быть более ориентирована на решение практических задач, чем на построение сложной архитектуры приложения

Но тут я бы убрал "построение сложной архитектуры", ибо архитектура не цель а средство!


многослойные городушки из классов - строго противопоказаны динамическим языкам
Таки товарищЬ утверждает что ООП не приемлимо в JS? Ай-ай-ай


Я бы сделал вывод что rainman_rocks чиста WEBщик (кстати по сему видно что вумный) но не видит перед собой уже начавшийся революции перевода больших стационарных приложений на WEB (облако). Ну низя без архитектуры большое приложение разрабатывать и поддерживать. Вот он утверждает что "придется тщательно обучить остальных разработчиков, работающих над проектом". А как вы еще хотели проект делать? Признать честно я вырвал это из контекста перегрузки операторов. А вот перегрузка операторов по моему мнению это крайняя мера! Вообщем чел вумный но не туда гребет.

Kolyaj 03.11.2010 10:20

Цитата:

Сообщение от eai
многослойные городушки из классов - строго противопоказаны динамическим языкам
Таки товарищЬ утверждает что ООП не приемлимо в JS? Ай-ай-ай

В JavaScript нет классов, а ООП есть. По сему ваш комментарий не имеет смысла.


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