如何在两个脚本之间正确地传递数据。
在这种特殊情况下,我在一个脚本中有一个元素,但我想将它附加到另一个脚本中。
我能做到的最简单的方法是使用全局窗口对象作为中间人。
但全局变量不是最佳实践。
将此元素传递给另一个脚本的正确方法是什么?
两个脚本都封装在模块模式中。
脚本0创建元素点
var element = document.createElement( "div" );
element.innerHTML = response_text;
脚本1附加元素点
Vi.sta = {
// implemented in the boot loader - shared global space - appended child already - you don't have to append until now.
// Static data has already been composed.
// Pull off window and append or best practice
};
两者都封装在模块模式
中(function(){
// the code here
})()
答案 0 :(得分:5)
window.sharedSpace = {};
sharedSpace.sharedValue = 'foo bar';
这样你只有一个全局对象而不是几个。
答案 1 :(得分:5)
所有JS脚本都在全局范围内运行。将文件下载到客户端后,它们将在全局范围内进行解析。
所以,如果你有
// File_1.js
var myObj = { colour : "blue" };
没有什么可以阻止你这样做:
// File_2.js
var otherObj = { colour : myObj.colour };
只要在File_2.js之前加载File_1.js
如果你是命名空间,即:MYNAMESPACE = {};
并且每个文件通过模块扩展你的命名空间(而不是“模块模式”指的是从立即调用函数返回的接口),那么检查模块是否存在。
如果您正在为命名空间应用程序编写模块,并且您需要访问从一个模块到另一个模块的变量,那么您应该为此提供interface
。
如果您是SANDBOXING
个模块,那么您需要提供与proxy
或service-locator
类似的"registry"
,或者开发messaging-system
基于mediator-pattern
。
答案 2 :(得分:1)
为什么不直接将元素传递给模块中的函数?
var module1 = (function () {
return {
func1: function () {
// get your element
var someElement = ...;
// pass it to the other module
module2.func2(someElement);
}
};
}) ();
var module2 = (function () {
return {
func2: function (someElement) {
// do whatever you want with someElement
}
};
}) ();