Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.06.2016, 10:32
Интересующийся
Отправить личное сообщение для greenrow Посмотреть профиль Найти все сообщения от greenrow
 
Регистрация: 22.01.2016
Сообщений: 12

использование 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() ?
Ответить с цитированием
  #2 (permalink)  
Старый 02.06.2016, 12:01
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от greenrow Посмотреть сообщение
То есть этот прототип нельзя вызвать так
Почему нельзя, ведь метод в прототипе?
Ответить с цитированием
  #3 (permalink)  
Старый 02.06.2016, 12:39
Интересующийся
Отправить личное сообщение для greenrow Посмотреть профиль Найти все сообщения от greenrow
 
Регистрация: 22.01.2016
Сообщений: 12

Да, если код изменит то можно реализовать, но сейчас я разбираю arguments- потом вызов прототипов.

По сути на данный момент у меня есть только конструктор,который формирует новый обьект.(Как например у google.Map). А прототипы используются для упрощения восприятия и написание кода и не предназначены для их внешнего вызова. ( типо как protected function)

Можно ли так делать или это неверный подход?

Допустим если эту доработанную библиотеку выложить в доступ и написать к ней мануал,где будет указано только описание конструктора
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2016, 15:05
Аватар для Botik21
Аспирант
Отправить личное сообщение для Botik21 Посмотреть профиль Найти все сообщения от Botik21
 
Регистрация: 01.06.2016
Сообщений: 87

Не делайте этого пока сами не разобрались что и как надо делать.

Из вашего текста не понятна что вы хотите и какая у вас проблема.
Сообщение от greenrow Посмотреть сообщение
проблема в том что сам обьект создан с использование прототипов, но они сами используютя только внутри обьекта и вызываются исходя параметров обьекта, которых может быть много и не все обязательные.
Объект не может быть создан с помощью прототипов, если только мы говорим не о наследовании.
"они сами", – это видимо методы заложенные в прототипе. По хорошему если это методы должны быть по задумке приватными их надо вынести из прототипа и сделать доступными только из области видимости объекта.
Ответить с цитированием
  #5 (permalink)  
Старый 02.06.2016, 17:06
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от greenrow Посмотреть сообщение
А прототипы используются для упрощения восприятия и написание кода и не предназначены для их внешнего вызова.
Не думаю что это нормально...
Ответить с цитированием
  #6 (permalink)  
Старый 02.06.2016, 17:55
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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

Последний раз редактировалось ruslan_mart, 02.06.2016 в 20:03.
Ответить с цитированием
  #7 (permalink)  
Старый 02.06.2016, 20:03
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

рони, упс, опечаточка.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу jQuery плагин для создания меню Zeboton jQuery 9 15.09.2014 15:31
Использование window.open() для позиционирования окна в середине экрана marat-chessman Events/DOM/Window 13 14.08.2011 20:20
Использование Ajax для динамического обновления содержимого Rifmasta AJAX и COMET 0 10.07.2009 15:39
Либа для создания окон Кирпич Библиотеки/Тулкиты/Фреймворки 8 25.06.2008 16:44