Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 02.11.2010, 17:01
Аватар для eai
eai eai вне форума
Аспирант
Отправить личное сообщение для eai Посмотреть профиль Найти все сообщения от eai
 
Регистрация: 09.07.2009
Сообщений: 36

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

Создание объектов до отказа браузера.
Результат хороший.
Хром(лучший результат) создал 17 миллионов объектов.
При этом увеличение количества методов не повлияло на результат.
Вывод, тело методов не плодиться для каждого экземпляра в отдельности. И это правильно товарищи
Ответить с цитированием
  #22 (permalink)  
Старый 02.11.2010, 17:12
Аватар для eai
eai eai вне форума
Аспирант
Отправить личное сообщение для eai Посмотреть профиль Найти все сообщения от eai
 
Регистрация: 09.07.2009
Сообщений: 36

Создаем объекты без наследования (от 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;
    }
});


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

Последний раз редактировалось eai, 02.11.2010 в 17:30.
Ответить с цитированием
  #23 (permalink)  
Старый 02.11.2010, 17:29
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

Сообщение от eai
Кстати, а можно ли с помощью этой библиотеки создавать статические свойства простых типов?
Присваивайте свойствам самого конструктора.
Ответить с цитированием
  #24 (permalink)  
Старый 02.11.2010, 17:31
Аватар для eai
eai eai вне форума
Аспирант
Отправить личное сообщение для eai Посмотреть профиль Найти все сообщения от eai
 
Регистрация: 09.07.2009
Сообщений: 36

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


Завтра начну тестировать наследование и перегрузку методов.
Ответить с цитированием
  #25 (permalink)  
Старый 02.11.2010, 17:32
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Да.
Ответить с цитированием
  #26 (permalink)  
Старый 03.11.2010, 02:36
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от 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));
Ответить с цитированием
  #27 (permalink)  
Старый 03.11.2010, 08:17
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

кстати, неплохая статья по теме
http://rainman-rocks.livejournal.com/67138.html
в частности, "динамические системы программирования созданы для иных целей, нежли статические, и не должны пытаться копировать подходы статических систем" или не надо писать на javascript, как будто это C++. Ничего хорошего не получится
Ответить с цитированием
  #28 (permalink)  
Старый 03.11.2010, 09:38
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Так сказать из уст пионера в поисках истины ООП в JavaScript
Classical Inheritance in JavaScript
Prototypal Inheritance in JavaScript
Private Members in JavaScript
Ответить с цитированием
  #29 (permalink)  
Старый 03.11.2010, 10:10
Аватар для eai
eai eai вне форума
Аспирант
Отправить личное сообщение для eai Посмотреть профиль Найти все сообщения от eai
 
Регистрация: 09.07.2009
Сообщений: 36

Сообщение от x-yuri Посмотреть сообщение
кстати, неплохая статья по теме
http://rainman-rocks.livejournal.com/67138.html
В статье позабавило
PHP и Perl устроены иначе, поэтому (и не только поэтому) они - плохие языки

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


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

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


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


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

Последний раз редактировалось eai, 03.11.2010 в 10:17.
Ответить с цитированием
  #30 (permalink)  
Старый 03.11.2010, 10:20
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск