在对象范围内调用变量

时间:2014-01-07 23:44:51

标签: javascript

我有一个带有此对象设置量的其他对象的JS文件。

     if (!me) var me = {};

        me.page = {


            initialize:function( options ) {
                var settings = $.extend({
                    error_module: $('#error-module'),
                    mainForm: $('form')
                }, options);

            },
            pagemaker:function(){
               var temp = settings.error_module
            }
        }

        me.bla = {
          // the scope of bla
        }

如果我打电话给me.page.pagemaker()它找不到设置变量。我不希望设置全局我希望它在对象页面的范围内。 我怎样才能使这个工作如此var temp = settings.error_module未定义。

3 个答案:

答案 0 :(得分:2)

您可以使用IIFE(立即调用函数表达式)。看看这是否有帮助。我稍微修改了你认为最佳实践的代码:

var me = me || (function(){
  var settings = {
    errorModule: '#error-module',
    mainForm: 'form'
  };
  return {
    page: {
      init: function(options) {
        $.extend(settings, options);
      },
      pageMaker: function() {
        var temp = $(settings.errorModule);
      }
    },
    bla: function() {

    }
  };
}());

编辑错过了外部对象。

答案 1 :(得分:1)

将其设为me

的属性
initialize:function( options ) {
    me.settings = ...;

}

后来:

pagemaker:function(){
   var temp = me.settings.error_module
}

此处也存在范围问题:

if (!me) var me = {};

你可以改用它:

var me = me || {};

答案 2 :(得分:0)

如果要将其保留在对象页面的范围内,可以在settings对象中定义另一个名为page的属性,因为它只是由键和值表示,如下所示:

me.page = {

  // Initial/default values
  settings: {
    error_module: null,
    mainForm: null,
  },

  initialize: function(options) {
    this.settings = $.extend({...}, options);
  },

  pagemaker: function() {
    var temp = this.settings.error_module;
  }
}