Estou tentando personalizar uma biblioteca JS existente sem modificar o código JS original. Este código é carregado em alguns arquivos JS externos aos quais tenho acesso e o que gostaria de fazer é alterar uma das funções contidas no arquivo original sem copiar e colar tudo no segundo arquivo JS.
Então, por exemplo, o fora dos limites JS pode ter uma função como esta:
var someFunction = function(){
alert("done");
}
Eu gostaria de poder acrescentar ou acrescentar algum código JS a essa função. A razão é principalmente que no JS original intocável a função é muito grande e se esse JS for atualizado, a função que eu sobrescrever ficará desatualizada.
Não tenho certeza se isso é possível, mas decidi verificar.
javascript
merge
append
user-defined-functions
prepend
Munzilla
fonte
fonte
Respostas:
Se
someFunction
estiver disponível globalmente, você pode armazenar a função em cache, criar a sua própria e fazer com que a sua a chame.Então, se este é o original ...
Você faria isso ...
Aqui está o violino
Observe que eu uso
.apply
para chamar a função em cache. Isso me permite reter o valor esperado dethis
e passar quaisquer argumentos que foram passados como argumentos individuais, independentemente de quantos eram.fonte
apply
: esta é a única resposta que realmente resolve o problema.funciton
palavra-chave do JavaScript ? ;) Obrigado pela edição.apply()
. Mas se fosse um objeto do tipo Array, como um objeto jQuery, por exemplo, então sim, alguns navegadoresprimeiro armazene a função real em uma variável.
em seguida, defina o seu próprio:
fonte
apply
para chamá-la. Veja a resposta de am.someFunction
comwindow.someFunction
no código acima. A razão é que minha função foi declarada dentro de um$(document).ready()
manipulador jquery .Você pode fazer uma função que chama seu código e, em seguida, chama a função.
fonte
Não sei se você pode atualizar a função, mas dependendo de como ela é referenciada, você pode fazer uma nova função em seu lugar:
fonte
Além disso. Se você quiser mudar o contexto local, terá que recriar a função. Por exemplo:
Agora
Então
E
Mas este é apenas o exemplo mais simples. Ainda vai dar muito trabalho para lidar com argumentos, comentários e valor de retorno. Além disso, ainda existem muitas armadilhas.
toString | fatia | indexOf | lastIndexOf | nova função
fonte
O padrão de proxy (conforme usado pelo user1106925) pode ser colocado dentro de uma função. O que escrevi abaixo funciona em funções que não estão no escopo global e até mesmo em protótipos. Você o usaria assim:
No snippet abaixo, você pode me ver usando a função para estender test.prototype.doIt ().
fonte