Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.08.2010, 10:36
Аспирант
Отправить личное сообщение для mexoboy Посмотреть профиль Найти все сообщения от mexoboy
 
Регистрация: 15.01.2010
Сообщений: 43

Посоветуйте маленькую ооп библиотеку
Подскажите пожалуйста компактыне библиотеки предназначенные именно для создание больших и гибких проектов на js. Пересмотрел как варинты truejs, base.js, dojo - но каждый чем-то не устроил.
Буду благодарен за ссылки =)
Ответить с цитированием
  #2 (permalink)  
Старый 03.08.2010, 10:50
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

function mixin(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 = mixin(new F(), proto);
    constructor.superclass = this.prototype;
    constructor.prototype.constructor = constructor;
    return constructor;
};

// ===============================================

var A = Object.inherit({
    constructor: function(foo) {
        this.foo = foo;
    },

    alert: function() {
        alert(this.foo);
    }
});

var B = A.inherit({
    constructor: function(foo) {
        B.superclass.constructor.apply(this, arguments);
        this.bar = foo + 1;
    },

    alert: function() {
        B.superclass.alert.apply(this, arguments);
        alert(this.bar);
    }
});

var b = new B(1);
b.alert();

Например.
Ответить с цитированием
  #3 (permalink)  
Старый 03.08.2010, 11:22
Аспирант
Отправить личное сообщение для mexoboy Посмотреть профиль Найти все сообщения от mexoboy
 
Регистрация: 15.01.2010
Сообщений: 43

Что-то знакомое... Это случаем не функция Дина Эдварда?
p.s. Как-то непонятно еще, почему расширяя прототип Function вызов этого метода проходит на типе Object?
Ответить с цитированием
  #4 (permalink)  
Старый 03.08.2010, 11:26
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от mexoboy
Как-то непонятно еще, почему расширяя прототип Function вызов этого метода проходит на типе Object?
alert(Object instanceof Function);
alert(Function instanceof Object);
Ответить с цитированием
  #5 (permalink)  
Старый 03.08.2010, 11:34
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от mexoboy
Это случаем не функция Дина Эдварда?
Это моя функция переделанная из той самой. Впрочем все реализации из неё переделаны.

Сообщение от mexoboy
p.s. Как-то непонятно еще, почему расширяя прототип Function вызов этого метода проходит на типе Object?
Лучше так
alert(typeof Object);
Ответить с цитированием
  #6 (permalink)  
Старый 03.08.2010, 13:55
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

У меня так:

Object.extend = function(self, obj, skip) {
	if (self == null) self = {};
	if (skip) for (var key in obj) key in self || (self[key] = obj[key]);
	else for (var key in obj) self[key] = obj[key];
	return self;
};

var Class = {
	create: function(parent, declaration) {
		var klass = function() {
			this.initialize.apply(this, arguments);
		};
		if (typeof parent == 'function') {
			var falseConstr = function() {};
			falseConstr.prototype = parent.prototype;
			klass.prototype = new falseConstr();
		} else if (parent) {
			declaration = parent;
			parent = null;
		}
		Object.extend(klass.prototype, declaration).initialize
			|| (klass.prototype.initialize = Function.blank);
		klass.prototype.$super = (klass.$super = parent || Object).prototype;
		return klass.prototype.constructor = klass;
	}
};


Только я не уверен, что все правильно, особенно вот в этой строчке:
klass.prototype.$super = (klass.$super = parent || Object).prototype;

В ajaxoop (http://ajaxoop.org/) эта строка написана так:
_class.prototype.$super  = parent ? parent.prototype : Function.blank.prototype;
_class.prototype.$_super = parent ? parent : Function.blank;

т. е. если не указан родитель, то им становится Function. Не понимаю зачем они так сделали, я родителем Object делаю, у Kolyaj тоже так, в общем либо я нуб, т. к. все еще чего-то не понимаю, либо ajaxoop нубы писали.
Ответить с цитированием
  #7 (permalink)  
Старый 03.08.2010, 13:59
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Riim
т. е. если не указан родитель, то им становится Function.
Очень, очень странно. Создаёшь конструктор ничего не наследующий, а у его объектов херак, всякие apply, call, которые ещё и не работают.
Ответить с цитированием
  #8 (permalink)  
Старый 01.11.2010, 19:06
Аватар для eai
eai eai вне форума
Аспирант
Отправить личное сообщение для eai Посмотреть профиль Найти все сообщения от eai
 
Регистрация: 09.07.2009
Сообщений: 36

Сижу вырываю код из закрытого проекту ajaxoop.
Тоже на рвался на строку
Function.blank.prototype

Зачем то надо было создать функцию blank ....
Ajax.extend( Function.prototype, {
	blank : function() {},

	bind : function() {
		if (arguments.length < 2 && Ajax.isUndefined( arguments[0])) return this;
		var f = this, args = $a( arguments), object = args.shift();
		return function() { return f.apply( object, args.concat( $a( arguments))); };
	}
}, true);

Последний раз редактировалось eai, 01.11.2010 в 19:20.
Ответить с цитированием
  #9 (permalink)  
Старый 06.11.2010, 15:12
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

и чем каждый не устроил?
__________________
.ня
Ответить с цитированием
  #10 (permalink)  
Старый 07.11.2010, 11:51
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от mexoboy
Что-то знакомое... Это случаем не функция Дина Эдварда?
А мне наработки Дугласа Крокфорда
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП PHP вопрос mycoding Серверные языки и технологии 9 03.06.2010 02:57