Timo "God's Boss" Reitz: Zugriff aus privater Methode in Prototype-Objekt auf this?

Beitrag lesen

Da muss ich dir leider unrecht geben. Methoden, die innerhalb des Konstruktors definiert sind, machen für mich den Code nur unleserlicher und schlechter zu verstehen und zu warten. Closures machen die Sache eben nicht einfacher.

Nachtrag: Wenn es dir nur darum geht, die Methoden irgendwo einheitlich zu sammeln, ist ja vielleicht das hier was für dich:

var MyClass=(function(){  
 // Helper function, should be outsourced.  
 function bind(obj, priv, func){  
  return function(){  
   var args=[priv];  
   for (var i=0,l=arguments.length;i<l;i++){  
    args.push(arguments[i]);}  
   return func.apply(obj, args);}}  
  
 // Constructor  
 function C(){  
  var priv={x:Math.random()};  
  this.toString=function(){return '[C x='+priv.x+']';};  
  for (var method in privateMethods){  
   priv[method]=bind(this, priv, privateMethods[method]);}  
  for (var method in privilegedMethods){  
   this[method]=bind(this, priv, privilegedMethods[method]);}}  
  
 // Private methods  
 var privateMethods={  
  setX: function(priv, x){  
   priv.x=x;}};  
  
 // Privileged methods  
 var privilegedMethods={  
  getX:function(priv){  
   return priv.x;},  
  mulX:function mulX(priv, factor){  
   priv.x*=factor;  
   return this;}};  
  
 // Unprivileged methods  
 C.prototype={  
  getDoubleX:function getDoubleX(){  
   return this.getX()*2;}};  
  
 return C;  
})();
--
Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|