我想在JavaScript中使用子对象

时间:2017-10-24 07:15:36

标签: javascript oop design-patterns javascript-objects

我想用"子模块"组织我的JavaScript-Object。我写了这个:

'use strict';

var APS = (function () {

    var dashboard = (function () {
        var onReady = function () {
          alert(2);
        };

        return {
            onReady: onReady
        }
    });

    var onReady = function () {
        alert(1);
        dashboard.onReady(); // does not work
    };


    return {
        onReady: onReady,
    }
})();

$(document).ready(APS.onReady);

alert(1)确实有效,dashboard.onReady()不起作用,我收到此错误消息:

  

未捕获的TypeError:dashboard.onReady不是函数

我想在不同的"子包中组织我的代码"在APS之下有一种层次。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

dashboard本身是一个尚未返回包含onReady的对象的函数。

通过添加另一个()来完成IIFE:

var dashboard = (function () {
    var onReady = function () {
      alert(2);
    };

    return {
        onReady: onReady
    }
})(); // Calls as IIFE

或者改为使用dashboard().onReady

答案 1 :(得分:1)

您使用了匿名函数,但没有让它运行以立即返回值。为此提供了两种解决方案。

  1. 像这样调用仪表板:
  2. 
    
    dashboard().onReady()
    
    
    

    1. 更好的一个,让匿名函数执行,注意"()"最后:
    2. 
      
      var dashboard = (function () {
        var onReady = function () {
          alert(2);
        };
      
        return {
          onReady: onReady
        }
      })();