A principal razão pela qual eu quero isso é que eu quero estender minha função de inicialização.
Algo assim:
// main.js
window.onload = init();
function init(){
doSomething();
}
// extend.js
function extends init(){
doSomethingHereToo();
}
Então, eu quero estender uma função como estendo uma classe em PHP.
E eu gostaria de estendê-lo de outros arquivos também, então, por exemplo, tenho a função init original em main.js
e a função estendida em extended.js
.
javascript
function
extend
Adão
fonte
fonte
Respostas:
Com uma visão mais ampla do que você está realmente tentando fazer e do contexto em que está fazendo isso, tenho certeza de que poderíamos dar uma resposta melhor do que a resposta literal à sua pergunta.
Mas aqui está uma resposta literal:
Se estiver atribuindo essas funções a alguma propriedade em algum lugar, você pode encapsular a função original e colocar sua substituição na propriedade:
Se suas funções ainda não estiverem em um objeto, você provavelmente gostaria de colocá-las lá para facilitar o acima. Por exemplo:
Mas existem tais melhores maneiras de fazer isso. Como, por exemplo, fornecer um meio de registrar
init
funções.(Muito do que foi dito acima poderia ser escrito de forma um pouco mais compacta, mas eu queria usar nomes claros como em
publicSymbols
vez de meupubs
literal de objeto anônimo normal . Você pode escrever de forma muito mais compacta se quiser ter funções anônimas, mas eu não t muito cuidado com funções anônimas .)fonte
Existem várias maneiras de fazer isso, depende de qual é o seu propósito, se você quiser apenas executar a função também e no mesmo contexto, você pode usar
.apply()
:Se você quiser substituí-lo por um mais recente
init
, ficaria assim:fonte
.call
método em vez de.apply
. Veja esta pergunta StackOverflow.Os outros métodos são ótimos, mas não preservam nenhuma função de protótipo anexada ao init. Para contornar isso, você pode fazer o seguinte (inspirado na postagem de Nick Craver).
fonte
Outra opção poderia ser:
fonte
Isso é muito simples e direto. Olhe o código. Tente compreender o conceito básico por trás da extensão javascript.
Primeiro, vamos estender a função javascript.
Você pode estender esta função criando uma função filha da seguinte maneira
Agora você pode usar a função Criança da seguinte maneira,
Também podemos criar função Javascript estendendo classes Javascript, como esta.
Vamos estender esta classe com a função Child assim,
Novamente, você pode usar a função filho da seguinte maneira para obter resultados semelhantes,
Javascript é uma linguagem muito fácil. Podemos fazer quase tudo. Feliz JavaScripting ... Espero ter podido lhe dar uma ideia para usar no seu caso.
fonte
Use extendFunction.js
Mas, no seu caso específico, é mais fácil estender a função onload global:
Na verdade, gostei muito da sua pergunta, está me fazendo pensar sobre diferentes casos de uso.
Para eventos javascript, você realmente deseja adicionar e remover manipuladores - mas para extendFunction, como você poderia remover a funcionalidade posteriormente ? Eu poderia facilmente adicionar um método .revert às funções estendidas, portanto
init = init.revert()
, retornaria a função original. Obviamente, isso pode levar a um código muito ruim, mas talvez permita que você faça algo sem tocar em uma parte estrangeira da base de código.fonte