[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Организовать код библиотеки
Slays
пытаюсь свою библиотеку написать, глянул организацию в jquery, ну там конечно ппц в 7180 строк, так что полностью разобраться не удалось, да и это фиг с ним, принцип то вроде понятен, а до ума довести не могу, помогите !!!

суть, подключение
$slays('id объекта').eventMouse({obj с различными параметрами});


eventMouse один из методов

js файл

(function() {
var slays = (function(){

// переменные
var ... , obj


// инициализация
var slays = function(element){
return new init(element)
}

// конструктор инициализации
function init(element){
element.onmousedown = mouseDown;

// наш метод
this.eventMouse = function(obj){
obj = obj;
}
}



function mouseDown(e){ }

// куча вспомогательных функций, использующие obj
function ....


// создание глобальной переменной
return (window.$slays = slays)
})();

})();


вобщем в window передается глобальная переменная-функция, которая возвращает объект, имеющий нужные методы. Когда объект один, все отлично, но как только создаю несколько объектов... При инициализации переменная obj для всех содержит параметры последнего объекта, т.е. переписывается.
Даже понятно что так и происходит, но как сделать по другому, не могу допетрить, мне нужно куда-то записывать переданные в метод параметры, чтоб они были для каждого объекта свои. В дальнейшем эти параметры нужны во многих вспомогательных функциях, идущих следом.

Помогите оптимизировать и поправить код, важно лишь чтоб суть осталась: 1 глобальная переменная, дабы не засорять пространство имен + подобное удобное подключение, с передачей параметров.

Важно, никаких сторонних библиотек не использовать.

И еще, тут нужно какие-то свойства, методы заносить в прототайп или нет, я так вроде подумал что не надо.
user posted image



Спустя 8 часов (15.12.2010 - 10:39) glock18 написал(а):
Цитата (Slays @ 14.12.2010 - 23:39)
И еще, тут нужно какие-то свойства, методы заносить в прототайп или нет, я так вроде подумал что не надо.


если объектов больше 1, обязательно надо. вообще очень странно у тебя выглядит код, ибо slays у тебя статический объект, obj находится в его области видимости, а не в init.

и тебе лично вот это

            this.eventMouse = function(obj){
obj = obj;
}


странно не выглядит? вообще непонятно что за такой eventMouse вообще.

параметры записывать не надо.

Спустя 4 минуты, 32 секунды (15.12.2010 - 10:43) kirik написал(а):
Slays
эх, чувствую забросишь ты это дело скоро smile.gif Как надоедят глюки браузеров. Но зато опыта много получишь полезного.

Спустя 2 минуты, 5 секунд (15.12.2010 - 10:45) Basili4 написал(а):
Slays
посмотри либу openlayers я блин офигел она если не упакованная на 1 метр с копейками.

Спустя 4 минуты, 59 секунд (15.12.2010 - 10:50) Slays написал(а):
            this.eventMouse = function(obj){
obj = obj;
}


ак в этом и проблема, перезаписывается переменная, но как по другому передать параметр в эту обертку ?
eventMouse это мой метод, который мы вызываем для объекта
$slays('id объекта').eventMouse({obj с различными параметрами});


slays не объект, это по сути функция (хоть функции тоже объекты, но он всеже function), которая возвращает объект. В jquery также сделано. По сути у нас тут всего один метод объекта, создаваемого при инициализации. Единственное не могу передать свой объект параметров к каждому элементу.

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

Ну мне интересно создать, брошу-не брошу, будет видно. Помогите организовать такую обертку )

Без метода все отлично работает, т.е. пр исоздании нескольких
$slays('id объекта')
$slays('id объекта')
$slays('id объекта')

они все самостоятельно делают что нужно, а вот индивидуальные параметры передать через метод не получается, ибо перезаписывается.

Спустя 18 минут (15.12.2010 - 11:08) glock18 написал(а):
obj = obj;


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

а насчет того как объект передать - почитай про делегирование функций, у объекта функции есть метод call в частности.

ЗЫ: и obj создается единожды, а не многократно, так что не спорь :P, возникает ощущение что ты не понимаешь зачем сделал это после определения функции "папа-slays" - function(){}();

в общем, трудно объяснять когда у тебя там половина функций и объектов одинаково называются, просто разберись сначала в том, что делаешь. задача то элементарная на самом деле. Про замыкания что ли почитай, раз используешь их

Спустя 27 минут, 6 секунд (15.12.2010 - 11:35) Slays написал(а):
я знаю как это работает абсолютно, и вижу из-за чего ошибка, но не знаю как сделать по другому, покажи примерчик, я просто на jquery ориентировался, хотя конечно возможно мне так заморочено не надо, ибо библиотека будет проще.

Спустя 31 минута, 43 секунды (15.12.2010 - 12:07) glock18 написал(а):
(function() {
var slays = (function(){

var obj;

// конструктор инициализации
with (init = function(element) {
this.obj = typeof element == 'string' ? document.getElementById(element) : element;
}) {
prototype.obj = undefined;
prototype.eventMouse = function(obj) {
this.obj = obj;
}

prototype.showObj = function() {
alert(this.obj + ' - ' + this.obj.innerHTML);
}
}


var slays = function(element){
return new init(element)
}

// создание глобальной переменной
return (window.$slays = slays)
})();
})();


ну вот собственно.

Цитата (Slays @ 15.12.2010 - 08:35)
я знаю как это работает абсолютно, и вижу из-за чего ошибка, но не знаю как сделать по другому, покажи примерчик


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

Спустя 9 минут, 8 секунд (15.12.2010 - 12:16) Slays написал(а):
я имел ввиду, что знаю что как происходит в том, что я написал, но я также понимаю что это далеко от идеала и не знаю как сделать по другому =)
ооп JS только недавно изучать начал, спасибо, поразбираю твой вариант, вечером отпишусь !

Спустя 8 часов, 26 минут, 11 секунд (15.12.2010 - 20:42) Slays написал(а):
блин, проблема на самом деле не решилась, в первую очередь она состояла в том, как передать переменную this.obj = obj (передаваемую в eventMouse) в сеть приватных функций
Цитата

мне нужно куда-то записывать переданные в метод параметры, чтоб они были для каждого объекта свои. В дальнейшем эти параметры нужны во многих вспомогательных функциях, идущих следом.


эти функции лежат в обертке, но они не должны становится методами init и тд, они должны быть приватны, но иметь возможность работать как с
$slays('ЭТИМ').eventMouse('ТАК И С ЭТИМ');


если передавать как я в переменные функции, то они перезаписываются, если как ты в свойства объекта, то эти функции их не видят

Спустя 1 день, 22 часа, 53 минуты, 50 секунд (17.12.2010 - 19:36) Slays написал(а):
ес, я сделал это user posted image


_____________
если помог, не скупись на карму =)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.