¿Podemos llamar a la función escrita en un archivo JS en otro archivo JS? ¿Alguien puede ayudarme a llamar a la función desde otro archivo JS?
¿Podemos llamar a la función escrita en un archivo JS en otro archivo JS? ¿Alguien puede ayudarme a llamar a la función desde otro archivo JS?
Respuestas:
Se podría llamar a la función como si estuviera en el mismo archivo JS siempre que el archivo que contiene la definición de la función se haya cargado antes del primer uso de la función.
Es decir
File1.js
function alertNumber(number) {
alert(number);
}
File2.js
function alertOne() {
alertNumber("one");
}
HTML
<head>
....
<script src="File1.js" type="text/javascript"></script>
<script src="File2.js" type="text/javascript"></script>
....
</head>
<body>
....
<script type="text/javascript">
alertOne();
</script>
....
</body>
La otra forma no funcionará.
Como señaló correctamente Stuart Wakefield . La otra forma también funcionará.
HTML
<head>
....
<script src="File2.js" type="text/javascript"></script>
<script src="File1.js" type="text/javascript"></script>
....
</head>
<body>
....
<script type="text/javascript">
alertOne();
</script>
....
</body>
Lo que no funcionará sería:
HTML
<head>
....
<script src="File2.js" type="text/javascript"></script>
<script type="text/javascript">
alertOne();
</script>
<script src="File1.js" type="text/javascript"></script>
....
</head>
<body>
....
</body>
Aunque alertOne
se define al llamarlo, internamente utiliza una función que aún no está definida ( alertNumber
).
La respuesta anterior tiene una suposición incorrecta de que el orden de inclusión de los archivos es importante. Como la función alertNumber no se llama hasta que se llama a la función alertOne. Siempre que ambos archivos estén incluidos en time alertOne se llama el orden de los archivos, no importa:
[HTML]
<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript">
alertOne( );
</script>
[JS]
// File1.js
function alertNumber( n ) {
alert( n );
};
// File2.js
function alertOne( ) {
alertNumber( "one" );
};
// Inline
alertOne( ); // No errors
O se puede pedir de la siguiente manera:
[HTML]
<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript">
alertOne( );
</script>
[JS]
// File2.js
function alertOne( ) {
alertNumber( "one" );
};
// File1.js
function alertNumber( n ) {
alert( n );
};
// Inline
alertOne( ); // No errors
Pero si fueras a hacer esto:
[HTML]
<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript">
alertOne( );
</script>
<script type="text/javascript" src="file1.js"></script>
[JS]
// File2.js
function alertOne( ) {
alertNumber( "one" );
};
// Inline
alertOne( ); // Error: alertNumber is not defined
// File1.js
function alertNumber( n ) {
alert( n );
};
Solo importa que las variables y funciones estén disponibles en el momento de la ejecución. Cuando se define una función, no ejecuta ni resuelve ninguna de las variables declaradas dentro hasta que esa función se llama posteriormente.
La inclusión de diferentes archivos de script no es diferente de la secuencia de comandos en ese orden dentro del mismo archivo, con la excepción de los scripts diferidos:
<script type="text/javascript" src="myscript.js" defer="defer"></script>
entonces debes tener cuidado.
function myfunction() {
y script2: alert();}
no funcionará. Me molesta porque estaba tratando de modularizar un archivo js que es demasiado largo. Ver stackoverflow.com/questions/20311604/…
this
contexto, si una de las funciones está en una clase?
this
está vinculado en el punto en que se llama la función (a menos que bind
se llame de antemano). Las dos funciones en dos archivos separados no compartirán el this
contexto automáticamente, en el ejemplo anterior tampoco tiene un this
contexto, es decir, window
en modo no estricto o undefined
estricto. Puede hacer que la función en el otro script comparta el mismo this
valor asignando la función como miembro del objeto (es decir, dentro del constructor this.method = myOtherFunc
) o usando bind. Publique una pregunta SO con más detalle si necesita una respuesta más profunda. Saludos, Stuart
Si se incluyen todos los archivos, puede llamar a las propiedades de un archivo a otro (como función, variable, objeto, etc.)
Las funciones y variables js que escribe en un archivo .js, digamos que a.js estará disponible para otros archivos js, digamos b.js siempre que tanto a.js como b.js se incluyan en el archivo usando lo siguiente: mecanismo (y en el mismo orden si la función en b.js llama a la de a.js).
<script language="javascript" src="a.js"> and
<script language="javascript" src="b.js">
ES6: en lugar de incluir muchos archivos js usando <script>
.html, puede incluir solo un archivo principal, por ejemplo, script.js
usando el atributo type="module"
( soporte ) y dentro script.js
puede incluir otros archivos:
<script type="module" src="script.js"></script>
Y en el script.js
archivo incluye otro archivo como ese:
import { hello } from './module.js';
...
// alert(hello());
En 'module.js' debe exportar la función / clase que importará
export function hello() {
return "Hello World";
}
Ejemplo de trabajo aquí .
sí tu puedes . necesita referirse tanto JS file
a la .aspx
página
<script language="javascript" type="text/javascript" src="JScript1.js">
</script>
<script language="javascript" type="text/javascript" src="JScript2.js">
</script>
JScript1.js
function ani1() {
alert("1");
ani2();
}
JScript2.js
function ani2() {
alert("2");
}
Puede llamar a la función creada en otro archivo js desde el archivo en el que está trabajando. Entonces, para esto, primero debe agregar el archivo js externo al documento html como-
<html>
<head>
<script type="text/javascript" src='path/to/external/js'></script>
</head>
<body>
........
La función definida en el archivo javascript externo:
$.fn.yourFunctionName = function(){
alert('function called succesfully for - ' + $(this).html() );
}
Para llamar a esta función en su archivo actual, simplemente llame a la función como -
......
<script type="text/javascript">
$(function(){
$('#element').yourFunctionName();
});
</script>
Si desea pasar los parámetros a la función, defina la función como-
$.fn.functionWithParameters = function(parameter1, parameter2){
alert('Parameters passed are - ' + parameter1 + ' , ' + parameter2);
}
Y llame a esta función en su archivo actual como -
$('#element').functionWithParameters('some parameter', 'another parameter');
$.fn
tarea en una cláusula de documento listo no tiene sentido
Aquí hay un ejemplo más descriptivo con un fragmento de CodePen adjunto:
1.js
function fn1() {
document.getElementById("result").innerHTML += "fn1 gets called";
}
2.js
function clickedTheButton() {
fn1();
}
index.html
<html>
<head>
</head>
<body>
<button onclick="clickedTheButton()">Click me</button>
<script type="text/javascript" src="1.js"></script>
<script type="text/javascript" src="2.js"></script>
</body>
</html>
salida
Pruebe este fragmento de CodePen: enlace .
Para aquellos que quieran hacer esto en Node.js (ejecutar scripts en el lado del servidor), otra opción es usar require
y module.exports
. Aquí hay un breve ejemplo sobre cómo crear un módulo y exportarlo para usarlo en otro lugar:
file1.js
const print = (string) => {
console.log(string);
};
exports.print = print;
file2.js
const file1 = require('./file1');
function printOne() {
file1.print("one");
};