Escenario 1 - todo funciona:Patrón necesario: crear un nuevo objeto que devuelve una función ejecutable y se hereda de un prototipo
var AwesomeObject = function()
{
var self = this;
self.whatstuff = 'really awesome';
}
AwesomeObject.prototype.doStuff = function()
{
var self = this;
console.log('i did '+self.whatstuff+' stuff');
return self;
}
var awesome = new AwesomeObject(); //returns a new AwesomeObject
awesome.doStuff(); // prints 'i did really awesome stuff' on the console
Ahora quiero que sea aún awesomer:
var AwesomeObject = function()
{
var f = function() { console.log('i am awesome'); }
var self = f;
self.whatstuff = 'really awesome';
return self;
}
AwesomeObject.prototype.doStuff = function()
{
var self = this;
console.log('i did '+self.whatstuff+' stuff');
return self;
}
var awesome = new AwesomeObject(); //returns the interal f object
awesome(); // prints 'i am awesome'
awesome.doStuff(); // throws an error
nueva AwesomeObject debe devolver una función ejecutable en sí misma, por lo que puedo decir 'awesome();'
pero también quiero que herede el AwesomeObject.prototype
.
sumando self.prototype = AwesomeObject.prototype;
no ayuda.
var AwesomeObject = function()
{
var f = function() { console.log('i am awesome'); }
var self = f;
self.whatstuff = 'really awesome';
self.prototype = AwesomeObject.prototype;
return self;
}
bien puedo copiar los AwesomeObject.prototype
funciones - una tras otra - en el ámbito de f
var AwesomeObject = function()
{
var f = function() { console.log('i am awesome'); }
var self = f;
self.whatstuff = 'really awesome';
self.doStuff = function() { AwesomeObject.prototype.doStuff.apply(self,arguments); }
return self;
}
pero yo creo que debe haber una mejor manera, un mejor patrón, ¿qué es?
este problema me vuelve loco, la ayuda sería muy apreciada.
en general: cómo crear un objeto función que
- se pueden crear con el nuevo
- devuelve un objeto de función que se puede ejecutar
- hereda todas las propiedades y métodos de un prototipo dada
?
¿hay alguna manera?
THX Franz
Creo que copie las funciones que necesita del prototipo. No debería necesitar usar apply(); simplemente haz self.doStuff = prototype.doStuff – Joel