脚本之间的通信|三种方法

时间:2012-08-23 17:51:03

标签: javascript

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

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

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

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

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

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

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

3 个答案:

答案 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个模块,那么您需要提供与proxyservice-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
        }
    };
}) ();