resueltos llamar llamada insertar ejemplos desde debe cómo código colocarse codigos codigo javascript merge append user-defined-functions prepend

llamar - la llamada al código javascript debe colocarse en



Agregar código a una función de javascript programáticamente (5)

Estoy intentando personalizar una biblioteca JS existente sin modificar el código JS original. Este código se carga en unos pocos archivos JS externos a los que tengo acceso, y lo que me gustaría hacer es cambiar una de las funciones contenidas en el archivo original sin copiar y pegar todo en el segundo archivo JS.
Entonces, por ejemplo, el JS fuera de límites podría tener una función como esta:

var someFunction = function(){ alert("done"); }

Me gustaría poder adjuntar o anteponer algún código JS a esa función. La razón es principalmente que en el JS original intocable la función es bastante enorme y si ese JS alguna vez se actualiza, la función con la que lo sobrescribo estará desactualizada.

No estoy del todo seguro de que esto sea posible, pero pensé que lo comprobaría.


No sé si puede actualizar la función, pero dependiendo de cómo se haga referencia a ella, puede hacer una nueva función en su lugar:

var the_old_function = someFunction; someFunction = function () { /* ..My new code... */ the_old_function(); /* ..More of my new code.. */ }


Puede hacer una función que llame a su código, y luego llama a la función.

var old_someFunction = someFunction; someFunction = function(){ alert(''Hello''); old_someFunction(); alert(''Goodbye''); }


Si someFunction está disponible en todo el mundo, puede almacenar en caché la función, crear la suya propia y hacer que la suya la llame.

Entonces, si este es el original ...

someFunction = function() { alert("done"); }

Tú harías esto ...

someFunction = (function() { var cached_function = someFunction; return function() { // your code var result = cached_function.apply(this, arguments); // use .apply() to call it // more of your code return result; }; })();

Aquí está el violín

Tenga en cuenta que uso .apply para llamar a la función en caché. Esto me permite retener el valor esperado de this y pasar los argumentos que se pasaron como argumentos individuales, independientemente de la cantidad que haya.


También. Si desea cambiar el contexto local, debe volver a crear la función. Por ejemplo:

var t = function() { var a = 1; }; var z = function() { console.log(a); };

Ahora

z() // => log: undefined

Entonces

var ts = t.toString(), zs = z.toString(); ts = ts.slice(ts.indexOf("{") + 1, ts.lastIndexOf("}")); zs = zs.slice(zs.indexOf("{") + 1, zs.lastIndexOf("}")); var z = new Function(ts + "/n" + zs);

Y

z() // => log: 1

Pero este es solo el ejemplo más simple. Tomará aún mucho trabajo manejar los argumentos, los comentarios y el valor de retorno. Además, todavía hay muchas trampas.
toString | slice | indexOf | lastIndexOf | nueva función


primero almacenar la función real en una variable ..

var oldFunction = someFunction;

luego define el tuyo:

someFunction = function(){ // do something before oldFunction(); // do something after };