Подтвердить что ты не робот

Javascript: добавить методы для работы прототипа

Есть ли более короткий способ написать это:

var controller = function(){ 
    /*--- constructor ---*/
}; 

controller.prototype.function1 = function(){ 
    //Prototype method1
}

controller.prototype.function2 = function(){ 
    //Prototype method2
}

controller.prototype.function3 = function(){ 
    //Prototype method3
} 

return controller

Я использую require.js. Я задавался вопросом, могу ли я избежать повторения кода контроллера.прототипа.

4b9b3361

Ответ 1

С помощью вспомогательной функции

Несмотря на то, что это длиннее, чем ответ, если вам нужно сделать это, несколько мест могут оказаться полезными для определения вспомогательного метода:

function protomix(constructor, mix){
    for(var i in mix)
      if(mix.hasOwnProperty(i))
          constructor.prototype[i]=mix[i];
}

var controller = function(){
 //constructor
};

protomix(controller, {

   function1 :  function(){ 
       //Prototype method1
   },

   function2:  function(){ 
       //Prototype method2
   },

   function3 : function(){ 
    //Prototype method3
   } 
});

return controller;

Использование метода расширения jQuery

Я думал, что должен упомянуть метод jQuery extend, потому что он был взят в комментарии и потому, что в целом имеет больше функциональности, чем метод малого помощника определенных в первой части ответа:

var controller = function(){ /* ctor */};
return $.extend(controller.prototype,{

   function1 :  function(){ 
       //Prototype method1
   },

   function2:  function(){ 
       //Prototype method2
   },

   function3 : function(){ 
    //Prototype method3
   } 
});

Другие библиотеки

Другие библиотеки также имеют аналогичную функциональность, например метод расширения подчеркивания или Метод назначения Lo-Dash