从父函数访问重写的变量

时间:2011-03-08 07:57:30

标签: javascript jquery scope

我想知道我目前的解决方法是否有更简单的解决方案。

Javascript示例:

var data= {
  'key1':'value1'
};

$.each(data,function foo() {
  alert(this); //alerts 'value1'
  $('#element').click(function()) {
    alert(this); //alerts something else
  }
});

解决这个问题的方法是:

var data= {
  'key1':'value1'
};


$.each(data,function foo() {
  alert(this); //alerts 'value1'

  var this_original=this;

  $('#element').click(function()) {
    alert(this_original); //alerts 'value1'
  }
});

这解决了问题,但不是很干净。我想知道是否有一个很好的Javascript / jQuery方法来获取子函数内部原始值的值。像:parentFunction.this

3 个答案:

答案 0 :(得分:2)

请勿使用this,而是使用参数:

var data= {
  'key1':'value1'
};

$.each(data,function foo(idx,val) {
  alert(val); //alerts 'value1'
  $('#element').click(function() {
    alert(val); //alerts 'value1'
  });
});

答案 1 :(得分:1)

请使用Martin Jespersen的答案。然而...

按要求使用jQuery的.proxy()函数:

var data = {
    "key1": "value1"
};

$.each(data, function(i, obj) {
    alert(this); //alerts 'value1'
    this.onClick = function() {
        alert(this);
    }

    $('#element').click($.proxy(this, "onClick"));
});

这是a fiddle example

请注意,您可能希望有一种方法可以更改选择器,以便在绑定点击事件的位置,我敢肯定。

答案 2 :(得分:-1)

使用jQuery.proxy。您可以使用以下代码:

 var data= {
  'key1':'value1'
};

$.each(data,function foo() {
  alert(this); //alerts 'value1'
  $('#element').click($.proxy(function() {
    alert(this); }, this);
});