использование prototype для создания конструктора обьекта
Добрый день!
Решил впервые попробовать создать свою небольшую библиотеку. Вот как у меня вызывается новые обьект (без необязательных аргументов)
var loader= new FileLoader(
'#main_content', //root
function(){alert('callback ok')} //callback
);
Вот как у меня вызывается новые обьект (с необязательными аргументами)
var loader= new FileLoader(
'#main_content', //root
{
fileinfo:{
root:'.fileloader_info',
length:files_length, //array
progress:true,
filename:file_names //array
},
settings:{hidefoto:true,'description':true}
},
function(){alert('callback ok')}//callback fnc
);
проблема в том что сам обьект создан с использование прототипов, но они сами используютя только внутри обьекта и вызываются исходя параметров обьекта, которых может быть много и не все обязательные. Например Если указан в параметре при создание нового обьекта {fileinfo:{ filename:file_names //array } } В главном обьекте вызывается
FileLoader.prototype.filename=function(arr,i){
/*код*/
}
То есть этот прототип нельзя вызвать так var loader= new FileLoader loader.filename() Вопрос - можно ли так формировать архитектуру библиотеки, или лучше все прототипы поменять на методы и разместить их все в одном главном методе конструкторе например _init() ? |
Да, если код изменит то можно реализовать, но сейчас я разбираю arguments- потом вызов прототипов.
По сути на данный момент у меня есть только конструктор,который формирует новый обьект.(Как например у google.Map). А прототипы используются для упрощения восприятия и написание кода и не предназначены для их внешнего вызова. ( типо как protected function) Можно ли так делать или это неверный подход? Допустим если эту доработанную библиотеку выложить в доступ и написать к ней мануал,где будет указано только описание конструктора |
Не делайте этого пока сами не разобрались что и как надо делать.
Из вашего текста не понятна что вы хотите и какая у вас проблема. Цитата:
"они сами", – это видимо методы заложенные в прототипе. По хорошему если это методы должны быть по задумке приватными их надо вынести из прототипа и сделать доступными только из области видимости объекта. |
greenrow,
var FileLoader = (function() {
function FileLoader(..., ...) {
this.test(); //Вызов публичного метода
Private.test3.call(this); //Вызов приватного метода
}
var Public = { //Публичные (внешние) методы
test: function() {
},
test2: function() {
}
};
var Private = { //Приватные (внутренние) методы
test3: function() {
}
};
FlieLoader.prototype = Public;
return FlieLoader;
})();
var fileLoader = new FileLoader; fileLoader.test(); //Ok fileLoader.test2(); //Ok fileLoader.test3(); //Error |
рони, упс, опечаточка. :)
|
| Часовой пояс GMT +3, время: 00:23. |