Javascript:向函数原型添加方法

Javascript:向函数原型添加方法,javascript,methods,prototype,Javascript,Methods,Prototype,有没有一种更简短的方式来写这个: var controller = function(){ /*--- constructor ---*/ }; controller.prototype.function1 = function(){ //Prototype method1 } controller.prototype.function2 = function(){ //Prototype method2 } controller.prototype.fun

有没有一种更简短的方式来写这个:

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。我想知道是否可以避免controller.prototype代码重复

使用辅助函数 即使这比必须执行此操作时给出的答案要长,但多个位置可能有助于定义助手方法:

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的extend方法 我想我应该提到它,因为它是在一篇评论中提出的,而且通常比答案第一部分中定义的small helper方法具有更多的功能:

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

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

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

   function3 : function(){ 
    //Prototype method3
   } 
});
其他图书馆
其他库也有类似的内置功能,例如or

Object.assign(controller.prototype,{function1:…})

您可能可以使用对象扩展原型,但是为什么,可读性和键入“prototype”没有错对于每个添加的原型。这就是我想知道的:-)连续的代码重复对我来说总是可疑的。你可以很简单地做一个ref快捷方式:var cp=controller.prototype;然后cp.function3=。。。您还可以使用对象文字,或者如果您只需要支持暴露function.name的eviron,您就可以获得真正的“优雅”,这看起来确实是一个明显的进步。谢谢。虽然给出的答案都很好,但抛开jQuery的
extend
方法作为另一种选择。这与下面给出的
protomix
函数非常相似。我接受它,因为你是对的。我计划在我的应用程序中使用很多控制器,所以这个函数会非常方便。谢谢。您最好使用Object.defineProperties