cómo exponer los methods públicos de las variables miembro en JS

Tengo una class

function A() { var that = this; var b = new B(); this.setBSize = function(newSize) { b.setSize(newSize); } }; function B() { var that = this; this.setSize = function(newSize) { ... } } a = new A(); a.setBSize(5); 

¿Cómo evito escribir el método setBSize? ¿Cómo expongo los methods públicos de b automáticamente? Quiero hacer la llamada como esta

 a.setSize(5); 

También necesito una reference a new B(); que es b dentro de A()

Siempre puede establecer el prototipo de A a B si desea henetworkingar todos los methods en B

 function A() { var that = this; }; function B() { var that = this; this.setSize = function (newSize) { console.log(newSize); // 5 } } A.prototype = new B(); a = new A(); a.setSize(5); 

VIOLÍN

En jQuery : $.extend(that, new B()); En angular : angular.extend(that, new B());

 function A() { var that = this; $.extend(that, new B()); }; function B() { var that = this; this.setSize = function(newSize) { ... } } a = new A(); a.setSize(5); 

Y si quiere usar cualquier variable private en la class B() , var someVar como var someVar , y todas las variables públicas (anulables) como that.somePublicVar

Puede usar el método de call para esto:

 function A() { var that = this; B.call(this); }; function B() { var that = this; this.setSize = function (newSize) { this.size = newSize; } } var a = new A(); a.setSize(5); 

Básicamente se invoca a B en el context de A , y lo que sucede es que todas las properties propias de la instancia B van a asignarse a this instancia, que es A Este patrón se llama préstamo de constructor o methods.

Deberías utilizar prototypes.

hacer un constructor que comparta la function entre todas las classs (objects):

 var myConstructor = function(newSize){ this.setSize = function(newSize) { ... } } 

Ahora haces instanciación:

 var a = new myConstructor(someSize); var b = new myConstrucotr(someSize); 

Ahora con este cambio a.setSize() es lo mismo que b.setSize()

Usando un prototipo para henetworkingar el método setSize y descartando todo this y that código.

 function B() { }; function A() { B.call(this); }; B.prototype.setSize = function(newSize) { console.log(newSize); } A.prototype = Object.create(B.prototype); A.prototype.constructor = A; var a = new A(); a.setSize(5); // 5 console.log(a instanceof A);// true console.log(a instanceof B);// true