использование 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, время: 05:47. |