<script src="first.js"></script>
<script src="second.js"></script>
first.js再次呼籲對象的功能在另一個腳本定義
var obj = {
id: 1,
xyz: function(){
}
};
我想更新的ID和呼叫XYZ功能second.js文件。什麼是最好的方式來做到這一點? 由於腳本將異步加載。
second.js
obj.xyz();
<script src="first.js"></script>
<script src="second.js"></script>
first.js再次呼籲對象的功能在另一個腳本定義
var obj = {
id: 1,
xyz: function(){
}
};
我想更新的ID和呼叫XYZ功能second.js文件。什麼是最好的方式來做到這一點? 由於腳本將異步加載。
second.js
obj.xyz();
更新:
在關於這個問題的評論,你你不使用任何類型的腳本裝載機的說。這意味着,鑑於您所引用的標記,首先加載並執行first.js
,然後加載並執行second.js
。 second.js
將不會加載並運行,直到first.js
(或直到first.js
加載失敗)。所以second.js
可以做你剛纔所展示的;除非first.js
完全無法加載,obj
將在那裏等待。基於有關該腳本異步加載要求
原來的答覆:
好,最好的辦法是有某種形式的兩者之間的連接或消息的。
但你可以與輪詢。
second.js:
(function() {
attempt();
function attempt() {
if (typeof obj !== "undefined") {
// Got it!
obj.xyz();
}
else {
setTimeout(attempt, 50);
}
}
})();
輪詢可能不是一個好的解決方案,而OP可以在對象準備好後觸發回調。 – Abhidev
@Abhidev:請參閱原始答案的**第一句**:「嗯,最好的方法是在兩者之間建立某種形式的連接或消息。」* –
在body標籤內的頁面的底部添加我們的所有腳本和腳本運行得很好。如果你仍然不能確定它(沒有理由雖然)您可以將您的JS調用這裏面: -
document.addEventListener('DOMContentLoaded', function() {
// your code here
}, false);
,或者如果您使用jQuery,你裏面添加這個代碼: -
$(document).ready(function() {
//your code
});
這不回答OP詢問的問題。這涉及DOM元素; OP的問題非常清楚地描述了第一個腳本創建的JavaScript對象。絕對不推薦污染全球範圍的 –
他們是如何加載異步?你是否使用懶惰的加載器腳本? –
不,我不是。我猜所有的腳本在頁面上異步加載。 – Yogesh
@Yogesh:不,他們沒有。用你給出的標記,它們同步加載*。 –