引用事件函数内的容器对象

时间:2009-05-14 15:14:26

标签: javascript

我有这样的代码

var MyObj = {

    f1 : function(o){ o.onmousedown = MyObj.f2;},
    f2 : function(){ MyObj.f1(); }
}

我想知道如何在没有硬编码的情况下引用MyObj(即这个),所以我可以在不改变代码的情况下更改对象名称。

我只对所谓的对象符号感兴趣。

编辑

我没弄错。其中一个函数实际上是onmousedown事件,所以这个不能正常工作......这将引用升级事件的对象。我想知道在这种情况下仍然可以引用MyObj。

2 个答案:

答案 0 :(得分:2)

使用this

例如:

var MyObj = {
    f1 : function(){ ... },
    f2 : function(){ this.f1(); }}

答案 1 :(得分:0)

  

其中一个功能实际上就是   onmousedown事件,所以这不是   在它工作...这将参考   提升事件的对象。我想知道   是否仍然可以参考MyObj   在这种情况下。

接下来是一种方式,但在这种情况下它可能不是很有用。

var baz = (function(){ // fake a scope
  var foo; // foo will exist in the next statement
  foo = { bar: function(){ return foo } };
  return foo;
})();

立即执行的函数包装器用于保持该块中的变量作用(Mozilla的后续版本的JS具有改进的作用域语法,但我假设这不是一个选项)。在这个简单的示例中,返回foo并将其用作baz的值,但如果您确实正在执行任务并且不关心foo是否留在那里,那么您将会只需要第二行。但如果它是一个更大的表达的一部分,那么这个成语可能会派上用场。