Mootools/Javascript范围问题

Mootools/Javascript范围问题,javascript,mootools,scope,Javascript,Mootools,Scope,我正在编写一个Mootools插件,但在理解范围问题时遇到了困难。一些代码来传达我的背景: var pluginName = new Class({ implements: [ Options ], initialize: function(paramOne, options) { this.setOptions(options); }, someFunction: function() { $$('menu').each(function(menu) {

我正在编写一个Mootools插件,但在理解范围问题时遇到了困难。一些代码来传达我的背景:

var pluginName = new Class({
   implements: [ Options ],

  initialize: function(paramOne, options) {
    this.setOptions(options);
  },

  someFunction: function() {
    $$('menu').each(function(menu) {
      // SCOPE OF INTEREST
    });
  }
};
我想知道在我写的“感兴趣的范围”中是否有方法访问options对象。我知道一种方法是在函数的开头设置一个变量,如下所示:

someFunction: function() {
    var optionIWantToAccess = this.options.relevantOption;
    $$('menu').each(function(menu) {
      // now optionIWantToAccess is available here
    });
  }
但这似乎有点笨拙,而且有一种更好的选择。这个问题的一个更一般的版本是:我可以访问Mootools迭代器中的类级范围(不确定这是否是正确的术语……但初始化函数中的范围就是我所说的)吗

在此方面的任何帮助都将不胜感激


谢谢。

您可以将函数绑定到实例

someFunction: function() {
  $$('menu').each(function(menu) {
    // 'this' is still the original instance
    this.options.relevantOption;
  }.bind(this))
}

函数#bind在旧浏览器中不可用,但添加对它的支持非常简单。

您可以将函数绑定到实例

someFunction: function() {
  $$('menu').each(function(menu) {
    // 'this' is still the original instance
    this.options.relevantOption;
  }.bind(this))
}

功能#bind在旧浏览器中不可用,但添加对它的支持非常简单。

两件事。mootools原型功能和添加
bind
(如果本机不可用)。其次,
Array.each
接受回调函数后的第二个参数,即
bind
,这样您就可以执行
Array.each(fn(){this.something();},this)其中
这是您绑定到的范围,但它可以是您需要的任何东西-这是最干净/最可读的方式,所以,请查看
绑定
mutator,这是绑定范围的更好/更干净的方式。谢谢大家!!!!(为什么有一个最小的评论长度迫使我在简单的谢谢后加上4个感叹号?@Oskar Krawczyk公平地说,我不再是Bonds mutator的忠实粉丝了。它增加了类实例化代码的开销,并通过包含更多的工具(或至少
class.Binds
)。它也可能很难阅读,因为它很容易错过声明(在一个长类中)——仅仅查看相关的代码部分可能没有多大意义——除非您记得查看类顶部。然后,还有一些扩展类,它们甚至可能存在于其他文件中……一些东西。mootools原型功能和添加
bind
(如果本机不可用)。其次,
Array.each
接受回调函数后的第二个参数,即
bind
,这样您就可以执行
Array.each(fn(){this.something();},this)其中
这是您绑定到的范围,但它可以是您需要的任何东西-这是最干净/最可读的方式,所以,请查看
绑定
mutator,这是绑定范围的更好/更干净的方式。谢谢大家!!!!(为什么有一个最小的评论长度迫使我在简单的谢谢后加上4个感叹号?@Oskar Krawczyk公平地说,我不再是Bonds mutator的忠实粉丝了。它增加了类实例化代码的开销,并通过包含更多的工具(或至少
class.Binds
)。它也可能很难阅读,因为它很容易错过声明(在一个长类中)——仅仅查看相关的代码部分可能没有多大意义——除非您记得查看类顶部。然后,还有一些扩展类,它们甚至可能存在于其他文件中。。。