7

如何正确地在两个脚本之间传递数据。

在这种特殊情况下,我在一个脚本中有一个元素,但我想将它附加到另一个脚本中。

我可以做到这一点的最简单方法是使用全局窗口对象作为中间人。

但是全局变量不是最佳实践。

将此元素传递给另一个脚本的正确方法是什么?

两个脚本都封装在模块模式中。

脚本 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 
})()
4

3 回答 3

6

所有 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类似于 aservice-locator或 a 的"registry",或者messaging-system基于 a开发一个mediator-pattern

于 2012-08-23T17:54:43.087 回答
5
window.sharedSpace = {};
sharedSpace.sharedValue = 'foo bar';

这样你就只有一个全局对象而不是几个。

于 2012-08-23T17:53:31.770 回答
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
        }
    };
}) ();
于 2012-08-23T17:59:40.017 回答