И так разбор библиотечки Коли.
Создание объектов до отказа браузера. Результат хороший. Хром(лучший результат) создал 17 миллионов объектов. При этом увеличение количества методов не повлияло на результат. Вывод, тело методов не плодиться для каждого экземпляра в отдельности. И это правильно товарищи :) |
Создаем объекты без наследования (от 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; } }); Кстати, а можно ли с помощью этой библиотеки создавать статические свойства простых типов? |
Цитата:
Цитата:
|
Типа так
Point.someProperty = ' I am static property'? Завтра начну тестировать наследование и перегрузку методов. |
Да.
|
Цитата:
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)); |
кстати, неплохая статья по теме
http://rainman-rocks.livejournal.com/67138.html в частности, "динамические системы программирования созданы для иных целей, нежли статические, и не должны пытаться копировать подходы статических систем" или не надо писать на javascript, как будто это C++. Ничего хорошего не получится ;) |
Так сказать из уст пионера в поисках истины ООП в JavaScript
Classical Inheritance in JavaScript Prototypal Inheritance in JavaScript Private Members in JavaScript |
Цитата:
PHP и Perl устроены иначе, поэтому (и не только поэтому) они - плохие языки Плохой язык не тот который поэтому (и не только по этому) а тот который не соответствует следующему выводу в той же статье разработка на динамических языках должна быть более ориентирована на решение практических задач, чем на построение сложной архитектуры приложения Но тут я бы убрал "построение сложной архитектуры", ибо архитектура не цель а средство! многослойные городушки из классов - строго противопоказаны динамическим языкам Таки товарищЬ утверждает что ООП не приемлимо в JS? Ай-ай-ай Я бы сделал вывод что rainman_rocks чиста WEBщик (кстати по сему видно что вумный) но не видит перед собой уже начавшийся революции перевода больших стационарных приложений на WEB (облако). Ну низя без архитектуры большое приложение разрабатывать и поддерживать. Вот он утверждает что "придется тщательно обучить остальных разработчиков, работающих над проектом". А как вы еще хотели проект делать? Признать честно я вырвал это из контекста перегрузки операторов. А вот перегрузка операторов по моему мнению это крайняя мера! Вообщем чел вумный но не туда гребет. |
Цитата:
|
Часовой пояс GMT +3, время: 22:35. |