Bir JS dosyasına yazılan işlevi başka bir JS dosyasında arayabilir miyiz? Herkes başka bir JS dosyasından işlevi nasıl çağırmak için bana yardımcı olabilir?
Bir JS dosyasına yazılan işlevi başka bir JS dosyasında arayabilir miyiz? Herkes başka bir JS dosyasından işlevi nasıl çağırmak için bana yardımcı olabilir?
Yanıtlar:
Fonksiyonun tanımını içeren dosya, fonksiyonun ilk kullanımından önce yüklenmiş olduğu sürece fonksiyon aynı JS Dosyasındaymış gibi çağrılabilir.
yani
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>
Diğer yol çalışmaz. Stuart Wakefield
tarafından doğru bir şekilde işaret edildiği gibi . Diğer yol da işe yarayacaktır.
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>
Ne işe yaramaz:
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>
Her ne kadar alertOne
çağrılırken tanımlansa da, dahili olarak hala tanımlanmamış bir işlev kullanır ( alertNumber
).
Yukarıdaki cevap, dosyaların dahil edilme sırasının önemli olduğu varsayımına sahiptir. AlertNumber işlevi alertOne işlevi çağrılıncaya kadar çağrılmadığından. Her iki dosya da time alertOne olarak dahil edildiği sürece dosyaların sırası önemli değildir:
[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
Veya aşağıdaki gibi sipariş edilebilir:
[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
Ama eğer bunu yapacak olsaydınız:
[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 );
};
Yalnızca yürütme sırasında kullanılabilen değişkenler ve işlevler hakkında önemlidir. Bir işlev tanımlandığında, o işlev daha sonra çağrılıncaya kadar içinde bildirilen değişkenlerin hiçbirini yürütmez veya çözmez.
Ertelenen komut dosyaları dışında, farklı komut dosyası dosyalarının eklenmesi, komut dosyasının aynı dosyada yer almasından farklı değildir:
<script type="text/javascript" src="myscript.js" defer="defer"></script>
o zaman dikkatli olmalısın.
function myfunction() {
ve script2: alert();}
işe yaramaz. Çok uzun bir js dosyasını modülerleştirmeye çalıştığım için beni rahatsız ediyor. Bkz. Stackoverflow.com/questions/20311604/…
this
biri bir sınıftaysa, bu işlev bağlamı paylaşır mı?
this
fonksiyonun çağrıldığı noktaya bağlıdır ( bind
önceden çağrılmadığı sürece ). İki ayrı dosyadaki iki işlev this
bağlamı otomatik olarak paylaşmaz, yukarıdaki örnekte ne this
bağlam vardır, yani window
katı olmayan veya undefined
katı modda. Diğer komut dosyasındaki this
işlevin, işlevi nesnenin bir üyesi olarak atadığı (yani yapıcı içinde this.method = myOtherFunc
) veya bind kullanarak aynı değeri paylaşmasını sağlayabilirsiniz . Daha ayrıntılı bir cevaba ihtiyacınız varsa lütfen bir SO sorusunu daha ayrıntılı olarak gönderin. Şerefe, Stuart
Tüm dosyalar dahil edilirse, özellikleri bir dosyadan diğerine çağırabilirsiniz (işlev, değişken, nesne vb.)
Js fonksiyonlar ve tek bir .js dosyasında yazma bunu değişkenler - diyelim ki a.js diğer js dosyalarına sunulacak - diyelim ki b.js sürece hem de a.js ve b.js şu şunlardır kullanarak dosyada mevcuttur mekanizması (ve b.js'deki işlev a.js'deki işlevi çağırırsa aynı sırada).
<script language="javascript" src="a.js"> and
<script language="javascript" src="b.js">
ES6:<script>
.html dosyasında birçok js dosyası eklemek yerine yalnızca bir ana dosya ekleyebilir, örneğin script.js
öznitelik type="module"
( destek ) kullanarak içeride script.js
başka dosyalar da ekleyebilirsiniz:
<script type="module" src="script.js"></script>
Ve script.js
dosyaya bunun gibi başka bir dosya ekleyin:
import { hello } from './module.js';
...
// alert(hello());
'Module.js'de içe aktaracağınız işlevi / sınıfı dışa aktarmanız gerekir
export function hello() {
return "Hello World";
}
Evet yapabilirsin . her ikisini JS file
de .aspx
sayfaya göndermeniz gerekir
<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");
}
Çalıştığınız dosyadan başka bir js dosyasında oluşturulan işlevi çağırabilirsiniz. Bu nedenle öncelikle harici js dosyasını html belgesine eklemeniz gerekir.
<html>
<head>
<script type="text/javascript" src='path/to/external/js'></script>
</head>
<body>
........
Harici javascript dosyasında tanımlanan işlev -
$.fn.yourFunctionName = function(){
alert('function called succesfully for - ' + $(this).html() );
}
Bu işlevi geçerli dosyanızda çağırmak için işlevi -
......
<script type="text/javascript">
$(function(){
$('#element').yourFunctionName();
});
</script>
Parametreleri işleve iletmek istiyorsanız, işlevi şu şekilde tanımlayın:
$.fn.functionWithParameters = function(parameter1, parameter2){
alert('Parameters passed are - ' + parameter1 + ' , ' + parameter2);
}
Ve mevcut dosyanızdaki bu işlevi -
$('#element').functionWithParameters('some parameter', 'another parameter');
$.fn
ödevi bir belgeye hazır cümlesine sarmak anlamsızdır
Aşağıda, bir CodePen snippet'inin eklendiği daha açıklayıcı bir örnek verilmiştir:
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>
çıktı
Bu CodePen snippet: bağlantısını deneyin .
Bunu yapmak isteyenler için node.js başka bir seçenek kullanmaktır (sunucu tarafında komut dosyalarını çalıştıran) require
ve module.exports
. Bir modülün nasıl oluşturulacağına ve başka bir yerde kullanılmak üzere nasıl dışa aktarılacağına dair kısa bir örnek:
file1.js
const print = (string) => {
console.log(string);
};
exports.print = print;
file2.js
const file1 = require('./file1');
function printOne() {
file1.print("one");
};