Sin nombrar la función es ¿Hay algún modo estricto en el que pueda obtener una referencia a la función cuyo alcance me encuentro actualmente?
No. Tiene que dar un nombre a la función. Mi error, pensé en una forma, vea el bloque de código final a continuación. No lo hago como, pero ahí estamos. :-)
Tenga en cuenta que la forma en que está dando la función de un nombre aquí:
UsageGraph = Graph.extend({
generateScale: function GS() {
var parentMethod = this.constructor._super.generateScale;
if(parentMethod === GS) {
parentMethod = this.constructor._super.constructor._super.generateScale;
}
parentMethod.call(this); // run the parent's method
//do additional stuff
}
})
... utiliza una expresión función llamada. Estos son notoriamente poco fiables (link, link) a través de implementaciones (que no deben ser, pero son), más notablemente en el ejemplo anterior, IE8 y anteriores creará dos objetos de función completamente separadas, asignando uno de ellos a la generateScale
propiedad y refiriéndose a un objeto de función diferente dentro de la función como GS
.
Es fácil de solucionar, sin embargo:
UsageGraph = Graph.extend(function(){
function GS() {
var parentMethod = this.constructor._super.generateScale;
if(parentMethod === GS) {
parentMethod = this.constructor._super.constructor._super.generateScale;
}
parentMethod.call(this); // run the parent's method
//do additional stuff
}
return {generateScale: GS};
}())
O si usted realmente no desea que la función tiene un nombre (yo prefiero que tienen nombres, helps my tools help me, pero bueno), se puede utilizar una local dentro de ese cierre:
UsageGraph = Graph.extend(function(){
var GS = function() {
var parentMethod = this.constructor._super.generateScale;
if(parentMethod === GS) {
parentMethod = this.constructor._super.constructor._super.generateScale;
}
parentMethod.call(this); // run the parent's method
//do additional stuff
};
return {generateScale: GS};
}())
Ahora usted tienen una función anónima, pero puede referirse a ella como GS
desde el interior de la misma. De nuevo, no lo recomendaría, porque entonces no se puede ver el nombre de la función en las pilas de llamadas, pero dijiste sin darle un nombre a la función, así que ...
Puedes asignar tu función a alguna variable. – antyrat
El progreso es algo hermoso. – Rolf