0

所以我知道问题是什么,但我不知道修复它的正确方法(语法)。

如果您从“myFunction”获取代码并将其放入我调用“myFunction”的 .each 循环中,那么我的代码可以工作,因为“this”正在被定义并且在我引用的 JSON 对象的范围内。

但是,当我编写函数并在 JSON 对象范围之外声明它时,它不再知道“this”是什么并返回“undefined”值。

如何将“this”作为参数传递给我的函数,以便正确获取值?

    $.getJSON('labOrders.json', function(json) {
    var aceInhibitors = "",
        antianginal = "",
        anticoagulants = "",
        betaBlocker = "",
        diuretic = "",
        mineral = "",
        myFunction = function () {
            aceInhibitors += "<div class='row drugLineItem'>",
            aceInhibitors += "<div class='columns moneydot' style='background:none;'></div>",
            aceInhibitors += "<div class='columns drugTitleWrap'>",
            aceInhibitors += "<div class='row drugTitle'>"+this.name+"</div>",
            aceInhibitors += "<div class='row drugDose'>"+this.strength+"</div>",
            aceInhibitors += "<div class='columns'></div>",
            aceInhibitors += "<div class='columns orderDeets dxRefill'>"+this.refills+"</div>",
            aceInhibitors += "<div class='columns orderDeets dxPillCount'>"+this.pillCount+"</div>",
            aceInhibitors += "<div class='columns orderDeets dxSig'>"+this.sig+"</div>",
            aceInhibitors += "<div class='columns orderDeets dxRoute'>"+this.route+"</div>",
            aceInhibitors += "<div class='columns orderDeets drugTab'>"+this.dose+"</div>"
        }

  $.each(json.medications, function(index, orders) {
    $.each(this.aceInhibitors, function() {
        myFunction();

    });
    $.each(this.antianginal, function() {

    });
  });

  $('#loadMedSections').append(aceInhibitors);



});
4

2 回答 2

3

你有两个选择:

 $.each(this.aceInhibitors, myFunction);

不需要包装器函数,它会有正确的上下文。

第二种选择:

$.each(this.aceInhibitors, function() {
    myFunction.call(this);
});

这将把它称为包装函数上下文的上下文。

于 2012-05-14T22:18:45.493 回答
1

有一个名为 的函数call,它允许您为 设置显式值this

例如,如果您执行以下操作:

myFunction.call(someobject);

然后myFunction将被调用this = someobject

在您的情况下,您可能可以这样做:

$.each(this.aceInhibitors, function() {
  myFunction.call(this); // will use the current value of "this" inside myFunction as well.
});
于 2012-05-14T22:19:31.253 回答