所以我知道问题是什么,但我不知道解决问题的正确方法(语法)。
如果从“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);
});
答案 0 :(得分:3)
您有两种选择:
$.each(this.aceInhibitors, myFunction);
不需要包装函数,这将具有正确的上下文。
第二个选项:
$.each(this.aceInhibitors, function() {
myFunction.call(this);
});
这将调用它将包装函数的上下文。
答案 1 :(得分: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.
});