【问题标题】:Retrieve class from javascript self-invoking function从javascript自调用函数中检索类
【发布时间】:2015-06-01 08:11:22
【问题描述】:

我有这个功能:

(function(window, document,undefined) {
    'use strict';
    function Test() {
        this.init = function() {
            console.log("init");
        }
    };
    return new Test;
})(window, document);

我知道class Test 只能在这种情况下访问。 但我想这样做:

Test.init();

如果我将它存储到一个变量中并这样做:

var t = (function() {...})();

然后执行console.log(t),它将返回class itself,然后,我可以检索它。但我不想这样做

我想知道,有没有办法从这个 Javascript 自调用函数中检索这个类? 如果可能,如何实现?

这是我正在使用的小提琴:http://jsfiddle.net/grnagwg8/

问候,

【问题讨论】:

  • 如果您想访问Test,不要将其包装在 IIFE 中?
  • 我知道这一点,但@Crowder 已经回答了我的问题! :)

标签: javascript self-invoking-function


【解决方案1】:

如果你想让它成为一个全局的,在内联调用的函数中(它不是self-invoking),分配给window上的一个属性:

(function(window, document,undefined) {
    'use strict';
    function Test() {
        this.init = function() {
            console.log("init");
        }
    };
    window.test = new Test;  // <====
})(window, document);

然后

test.init();

window,在浏览器中,是对全局对象的引用。全局对象的属性是全局变量。

不过,一般来说,最好避免使用全局变量。如果您有多个这些东西,请考虑使用一个对象并将它们作为属性放在它上面,这样您就只有 一个 全局而不是多个:

var MyStuff = (function(window, document,undefined) {
    'use strict';
    function Test() {
        this.init = function() {
            console.log("init");
        }
    };
    return {             // <====
        foo: "bar",      // <====
        baz: "nifty",    // <====
        test: new Test   // <====
    };                   // <====
})(window, document);

然后

MyStuff.test.init();

您还可以查看“异步模块定义”(AMD) 解决方案。


请注意,在上面的示例中,我使用了test 而不是Test。 JavaScript 中的 overwhelming 约定是初始上限标识符用于构造函数,有时用于“命名空间”容器对象(它们不是真正的命名空间,但它是应用于它们的通用名称)。您的实例不是构造函数,所以...

【讨论】:

    猜你喜欢
    • 2011-10-10
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多