2016-06-04 14 views
1

Ich versuche derzeit, ein Benutzer-Skript für ein Online-Browser-Spiel zu schreiben, indem ich Prototypen modifiziere (der Code ist verschlüsselt, so ist dies die einzige Möglichkeit, ich kann es tun). In der Regel, was ich tun, ist so etwas wie dieses:Javascript: Gibt es etwas anderes mit Node.prototype? Aus irgendeinem Grund kann ich es nicht ohne Fehler ändern

var fillz = CanvasRenderingContext2D.prototype.fill; 
CanvasRenderingContext2D.prototype.fill = function(){ 
    var arguments_ = arguments; 

    // based on the extension, modify arguments_ as needed 

    fillz.apply(this, arguments_); 
}; 

Vor kurzem musste ich einige Änderungen an Node.prototype.appendChild machen. Aber aus irgendeinem Grund ist der Basiscode hier:

hält Wurffehler. Soweit ich das beurteilen kann, sollte es niemals Fehler verursachen, da ich noch nicht einmal Änderungen vorgenommen habe.

Irgendein Einblick? thx

Antwort

3

Node.appendChild() gibt einen Wert zurück. Wenn also ein Teil des Codes erwartet, dass die Funktion einen Wert zurückgibt, schlägt sie fehl.

Sie müssen unseren Code so ändern, dass sie den Wert des ursprünglichen Anruf zurück:

var appndchld = Node.prototype.appendChild; 
Node.prototype.appendChild = function(){ 
    return appndchld.apply(this, arguments); 
} 

Sie sollten immer davon ausgehen, dass die Funktion, die Sie überschreiben einen Rückgabewert hat und return in Ihrem Wrapper verwenden. Und selbst wenn es keinen hat, würde ich immer noch den return hinzufügen, weil es für den Fall speichert, dass die Funktion in Zukunft einen Rückgabewert haben wird.

+0

Ok das macht Sinn, danke für den Tipp! ; D aus irgendeinem Grund, ich denke, ich musste nie etwas überschreiben, das den Rückgabewert verwendet, also ist es mir nie in den Sinn gekommen. : P – Superdoggy