Javascript-理解Requirejs模块文本和;这";

Javascript-理解Requirejs模块文本和;这";,javascript,module,requirejs,amd,object-literal,Javascript,Module,Requirejs,Amd,Object Literal,我有一个requirejs模块,我定义它时没有依赖性,我是从我以前使用的对象文本移植过来的。我原以为将文本作为返回值进行扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通。我不断得到错误无法调用未定义的的方法“getHeight”,我假设在我的对象中,这个的每个实例都会发生这个错误 它为什

我有一个requirejs模块,我定义它时没有依赖性,我是从我以前使用的对象文本移植过来的。我原以为将文本作为返回值进行扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通扑通。我不断得到错误
无法调用未定义的
的方法“getHeight”,我假设在我的对象中,
这个
的每个实例都会发生这个错误

它为什么这样做?因为退货的范围?这是我所拥有的

define(function() {
  return {
    // Photos
    photos: {
      // Get photos wrapper
      $photos: function(){
        return $('#photos');
      },
      setHeight: function() {
        var height = this.header.getHeight(); // Here is where I get my first error "Cannot call method 'getHeight' of undefined"
        return this.$photos().height($(window).height() - height);
      },
      setWidth: function() {
        var width = 0;
        $('#photos').find('img').each(function() {
          width += parseInt($(this).width());
        });
        return this.$photos().width(width);
      },
      init: function() {
        this.setHeight();
        this.setWidth();
      }
    },
    // Header
    header: {
      $header: function() {
        return $('header')
      },
      top: function() {
        var self = this;
        return parseInt(self.$header().css('margin-top'));
      },
      bottom: function() {
        var self = this;
        return parseInt(self.$header().css('margin-bottom'));
      },
      getHeight: function() {
        return this.$header().height() + (this.top() + this.bottom());
      }
    },
    // Padd the Body
    padBody: function() {
      var padding = this.header.getHeight();
      return $('.body').css('padding-top', padding);
    },
    loadImages: function() {
      var self = this;

      $("img[data-src]").unveil(200, function() {
        $(this).load(function() {
          $(this).removeClass('loading').addClass('loaded');
          self.photos.init();
        });
      });
    },
    init: function() {
      var self = this;

      // Fire everything
      this.padBody();
      this.loadImages();

      $(window).on('resize', function() {
        self.padBody();
        self.photos.init();
      });
    }
  }
});

在这种情况下,“this”是全局对象(严格模式下为window或null)。您应该使用构造函数(新…)为对象函数创建自己的作用域(jsbin.com/dubuxonu/1/edit requirejs没有错误)

若您不想使用构造函数,请将作用域保存在变量中,并使用它在如下所示的正确上下文中调用您的方法

   (function(){
       var moduleObject = {
         meth1: function(){},
         meth2: function(){ moduleObject.meth1() }
       } 
       return moduleObject;
    });

在这里,我没有使用“this”,而是直接说我要在哪个对象中调用方法,在这种情况下,“this”是全局对象(严格模式下为window或null)。您应该使用构造函数(new…)为对象函数创建自己的作用域(requirejs没有错误),但我不想实例化它。它是一个静止的物体。我应该声明对象并返回对象吗?或者创建一个构造函数并实例化它是唯一的方法吗?在这种情况下-在变量中保存对象的链接,并在中使用来调用这样的方法