使用模块模式时在父作用域中访问变量

时间:2016-04-14 20:51:53

标签: javascript

我想知道在这个示例中访问obj变量的最佳方法是什么:

function Module() {


  $('foo').on('click', function() {
    if (obj.test === true) {
      // do something
    }
  })


  return {
     setObj: function(obj) {
       // what should I do
     }
  }
}

是否有一种简单的方法可以在点击处理程序中访问obj。我正在寻找最简单的方法。

1 个答案:

答案 0 :(得分:3)

声明obj两个函数的范围:

function Module() {

  var obj;

  $('foo').on('click', function() {
    if (obj.test === true) {
      // do something
    }
  })


  return {
    setObj: function(_obj) {
      obj = _obj;
    }
  }
}

如果将Module用作构造函数(使用new),您还可以这样做:

function Module() {

  var self = this;

  $('foo').on('click', function() {
    if (self.obj.test === true) {
      // do something
    }
  })

}

Module.prototype.setObj = function ( obj ) {
    this.obj = obj;
};

或者使用ES6:

function Module() {

  $('foo').on('click', _ => {
    if (this.obj.test === true) {
      // do something
    }
  })

}

Module.prototype.setObj = function ( obj ) {
    this.obj = obj;
};