, ohne die Funktion zu benennen ist Gibt es irgendeinen Weg im strikten Modus, dass ich einen Verweis auf die Funktion bekommen kann, in deren Bereich ich mich gerade befinde?
Nein. Sie müssen der Funktion einen Namen geben. Mein Fehler, ich dachte an einen Weg, siehe den letzten Codeblock unten. Ich nicht wie es, aber da sind wir. :-)
Beachten Sie, dass die Art und Weisen Sie die Funktion hier einen Namen geben:
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
}
})
... verwendet einen benannte Funktion Ausdruck. Diese sind notorisch unzuverlässig (link, link) über Implementierungen (sie sollten nicht sein, aber sind), vor allem in Ihrem Beispiel oben, IE8 und früher wird zwei völlig separate Funktionsobjekte erstellen, die Zuordnung einer von ihnen generateScale
Eigenschaft und bezogen auf eine verschiedene Funktionsobjekt innerhalb der Funktion als GS
.
Es ist einfach zu beheben, aber:
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};
}())
Oder wenn Sie wirklich die Funktion einen Namen haben nicht wollen (ich es vorziehen, dass sie Namen haben, helps my tools help me, aber hey), können Sie ein verwenden Lokal innerhalb dieser Schließung:
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};
}())
Jetzt haben Sie eine anonyme Funktion, sondern es als GS
aus nachschlagen zu können. Nochmals, ich würde es nicht empfehlen, denn dann kann man den Funktionsnamen in Anruflisten und dergleichen nicht sehen, aber man hat gesagt, ohne der Funktion einen Namen zu geben, also ...
Sie können Ihre Funktion zuweisen zu einer Variablen. – antyrat
Fortschritt ist eine schöne Sache. – Rolf