在$ .each循环中传递此关键字

时间:2014-02-22 14:42:25

标签: javascript jquery

我想在下面的代码中以$ .each循环传递此上下文。

var obj = {
  "flammable": "inflammable",
  "duh": "no duh"
};
$.each( obj, _foo);

function _foo (key, value) {
    console.log(this);
    alert( key + ": " + value );
}

如何在上述场景中在回调函数中传递此关键字?

3 个答案:

答案 0 :(得分:2)

如果您要保留外部this值,那么由于您正在使用jQuery进行迭代,因此您需要将this值绑定到该函数。

jQuery有$.proxy,可以让你这样做:

$.each(obj, $.proxy(_foo, this));

或使用原生.bind()方法。

$.each(obj. _foo.bind(this));

本机.forEach()允许您将this值作为第二个参数传递。但由于您没有Array或类似数组的对象,因此无法直接使用它。

答案 1 :(得分:0)

使用$ .proxy()将自定义上下文传递给函数调用

var obj = {
    "flammable": "inflammable",
        "duh": "no duh"
};
$.each(obj, $.proxy(_foo, this));

function _foo(key, value) {
    console.log(this);
    alert(key + ": " + value);
}

答案 2 :(得分:0)

您可以使用javascript bind()函数,检查browser support(ie9及以上)。

var obj = {
  "flammable": "inflammable",
  "duh": "no duh"
};
$.each( obj, _foo.bind(obj));

function _foo (key, value) {
    console.log(this);
    //alert( key + ": " + value );
}