La razón principal por la que lo quiero es que quiero extender mi función de inicialización.
Algo como esto:
// main.js
window.onload = init();
function init(){
doSomething();
}
// extend.js
function extends init(){
doSomethingHereToo();
}
Entonces quiero extender una función como extiendo una clase en PHP.
Y también me gustaría extenderlo desde otros archivos, así que, por ejemplo, tengo la función init original main.js
y la función extendida en extended.js
.
javascript
function
extend
Adam Halasz
fuente
fuente
Respuestas:
Con una visión más amplia de lo que realmente está tratando de hacer y el contexto en el que lo está haciendo, estoy seguro de que podríamos darle una mejor respuesta que la respuesta literal a su pregunta.
Pero aquí hay una respuesta literal:
Si está asignando estas funciones a alguna propiedad en algún lugar, puede ajustar la función original y colocar su reemplazo en la propiedad en su lugar:
Si sus funciones aún no están en un objeto, probablemente desee colocarlas allí para facilitar lo anterior. Por ejemplo:
Pero hay tales mejores maneras de hacer eso. Como, por ejemplo, proporcionar un medio para registrar
init
funciones.(Gran parte de lo anterior podría escribirse de forma un poco más compacta, pero quería usar nombres claros como en
publicSymbols
lugar de mipubs
objeto literal habitual o anónimo. Puede escribirlo de forma mucho más compacta si desea tener funciones anónimas, pero yo no ' Tenga mucho cuidado con las funciones anónimas ).fuente
Hay varias formas de hacerlo, depende de cuál sea su propósito, si solo desea ejecutar la función también y en el mismo contexto, puede usar
.apply()
:Si desea reemplazarlo por uno más nuevo
init
, se vería así:fuente
.call
método en lugar de.apply
. Vea esta pregunta de StackOverflow.Los otros métodos son geniales pero no conservan ninguna función prototipo adjunta a init. Para evitarlo, puede hacer lo siguiente (inspirado en la publicación de Nick Craver).
fuente
Otra opción podría ser:
fuente
Esto es muy simple y directo. Mira el código. Intente comprender el concepto básico detrás de la extensión javascript.
Primero, extendamos la función javascript.
Puede extender esta función creando una función secundaria de la siguiente manera
Ahora puede usar la función Niño de la siguiente manera,
También podemos crear la función Javascript ampliando las clases de Javascript, como esta.
Extendamos esta clase con la función Child como esta,
Nuevamente, puede usar la función Niño de la siguiente manera para obtener un resultado similar,
Javascript es un lenguaje muy sencillo. Podemos hacer casi cualquier cosa. Happy JavaScripting ... Espero haber podido darte una idea para usar en tu caso.
fuente
Utilice extendFunction.js
Pero en su caso específico, es más fácil extender la función de carga global:
De hecho, me gusta mucho tu pregunta, me hace pensar en diferentes casos de uso.
Para los eventos de JavaScript, realmente desea agregar y eliminar controladores, pero para extenderFunction, ¿cómo podría eliminar la funcionalidad más tarde ? Podría agregar fácilmente un método .revert a funciones extendidas, por
init = init.revert()
lo que devolvería la función original. Obviamente, esto podría conducir a un código bastante malo, pero quizás le permita hacer algo sin tocar una parte extraña del código base.fuente