3 Stimmen

Skripte in eine bestehende Funktion einfügen?

Diese Funktion ist in die Seite integriert, und ich kann die ursprüngliche .js-Datei nicht ändern:

cool.lol = function () {

    // contents here

}

Gibt es eine Möglichkeit, diese Funktion mit einigen meiner eigenen Skripte zu ergänzen?

Zum Beispiel so:

cool.lol = function () {

    // contents here

    // i would like to add my own stuff here!!!
}

Oder gibt es eine Möglichkeit für mich zu erkennen, dass die Funktion ausgeführt wurde, so dass ich etwas nach ihr ausführen kann?

10voto

Joseph Punkte 113912

Hier ist eine Demo der folgenden . Aktualisiert, um eine Schließung zu verwenden und die Notwendigkeit für eine temporäre Variable zu beseitigen.

//your cool with lol
var cool = {
    lol: function() {
        alert('lol');
    }
}

//let's have a closure that carries the original cool.lol
//and returns our new function with additional stuff

cool.lol = (function(temp) { //cool.lol is now the local temp
    return function(){       //return our new function carrying the old cool.lol
        temp.call(cool);     //execute the old cool.lol
        alert('bar');        //additional stuff
    }
}(cool.lol));                //pass in our original cool.lol

cool.lol();
cool.lol();

1voto

Andreas Wong Punkte 57642

http://jsfiddle.net/Pcxn5/1/

// original definition which you can't touch
var cool = {
    lol: function() {
        alert("test");
    }
}
//

// your script
var ori = cool.lol;
cool.lol = function() {
    ori();
    alert('my test');
}

cool.lol();

1voto

bfavaretto Punkte 70403

Sie können die Funktion außer Kraft setzen:

// The file you can't touch has something like this
var cool = {};
cool.lol = function () {
    console.log("original");
}

// Keep a copy of the original function.
// Override the original and execute the copy inside
var original = cool.lol;
cool.lol = function () {
    original();
    console.log("modified");
}

// Call
cool.lol(); // logs "original", then "modified".

http://jsfiddle.net/K8SLH/

1voto

Derek 朕會功夫 Punkte 88112

Ohne Variablen zu erstellen, die den öffentlichen Bereich verschmutzen:

 //let's have your cool namespace
var cool = {
    lol: function() {
        alert('lol');
    }
}

//temporarily store
cool.lol_original = cool.lol;

//overwrite
cool.lol = function() {
    this.lol_original(); //call the original function
    alert('bar');    //do some additional stuff
}

cool.lol();

1voto

Imp Punkte 8199

Mit JavaScript können Sie

  • den Code der Funktionen als String abrufen
  • neue Funktionen durch Angabe einer Zeichenkette mit Code erstellen

Jedes Objekt hat eine toString() Methode. Bei Funktionen wird ihr Code zurückgegeben (sofern er nicht überschrieben wurde).

cool.lol.toString();

gibt zurück. function() { // contents here } .

Extrahieren wir den Körper der Funktion aus dieser Zeichenkette. Er beginnt unmittelbar nach { und enthält alles außer dem letzten } .

var code = cool.lol.toString();
var body = code.substring(code.indexOf('{') + 1, code.length - 1);

Dann fügen wir weitere Dinge hinzu

var newBody = body + '// i would like to add my own stuff here!!!';

und erstellen Sie eine neue Funktion mit der Function Konstrukteur.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function

cool.lol = new Function(newBody);

Natürlich gibt es mehr Arbeit zu tun, wenn die neue Funktion auch Argumente behalten muss (Sie müssen sie aus dem Funktionscode auslesen und sie dann als Parameter an die Function Konstrukteur). Der Einfachheit halber habe ich in diesem Fall angenommen, dass es keine Argumente für die Funktion gibt.

Ein Implementierungsbeispiel:

http://jsfiddle.net/QA9Zx/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X