对不起,标题很抱歉,在不显示代码的情况下很难解释。

我有一个名为Coupon的javaScript类,该类具有一个功能,该功能基本上会打开fancyBox并显示该优惠券对象的内容(动态)。

像这样

function CouponPopup( id, title, barcodeUrl, expirationDate, description ) {
  this.coupondId = id;
  this.couponContainer = document.createElement('div');
  this.couponTitle = document.createElement('h2');
  this.couponPrizeName = document.createElement('h3');
  var self = this;
  // More vars, etc. . .

  // assemble the coupon
 this.couponContainer.appendChild(this.couponTitle);
 this.couponContainer.appendChild(this.couponPrizeName);
 this.couponContainer.appendChild(this.couponRevealDetails);
 this.couponContainer.appendChild(this.couponBarcode);
 this.couponContainer.appendChild(this.couponExpirationText);
 this.couponContainer.appendChild(this.couponPrintButton);

 this.show = function ( event ) {
     $.fancybox(self.couponContainer);
  }
};  // end class CouponPopup


现在,在调用此代码的代码中,我尝试建立一个链接-单击该链接时,将在CouponPopup的正确实例上调用show函数。

for (var i = 0; i < dataLength; i++) {
   if (data.type === "coupon") {
       var couponId = "coupon_" + i;
       // right now, my coupon will be on global scope.
       myCoupon =  new CouponPopup( couponId,
           data.rewards[i].prize_name,
           data.rewards[i].url,
           data.rewards[i].expirationdate);

       rewardInfo = '<a id="' + couponId + '" onclick="myCoupon.show( event )">View Coupon</a>';

   }
}


rewardInfo最终会附加到页面上-并且看起来不错。

但是,当我单击它时,由于myCoupon在globalScope上-显示的fancyBox始终是最后创建的优惠券。

如果我尝试将myCoupon放在本地范围内(添加var关键字),则会收到JS错误,提示myCoupon添加到链接的onClick处理程序时未定义。

我想要做的是将myCoupon设置为局部变量,并且仍然可以正常工作-因此,链接的onClick事件绑定到myCoupon的特定实例

做这个的最好方式是什么?我有一个黑客,但它确实是黑客,如果可以帮助的话,我真的不喜欢在代码中使用全局变量。

放屁,所以对您的帮助不胜感激!

寻找老式的ES5解决方案。

最佳答案

您可以尝试执行以下操作:

for (var i = 0; i < dataLength; i++) {


    if (data.type === "coupon") {
       var couponId = "coupon_" + i;
       // right now, my coupon will be on global scope.
       myCoupon =  new CouponPopup( couponId,
           data.rewards[i].prize_name,
           data.rewards[i].url,
           data.rewards[i].expirationdate);

       rewardInfo = '<a id="' + couponId + '" onclick="showCoupon('+ couponId +')">View Coupon</a>';

     }
}


然后像这样创建一个函数showCoupon:

  function showCoupon (couponId) {
    try {
      var index = parseInt(couponId.replace('coupon_', ''));

      new CouponPopup( couponId,
           data.rewards[index].prize_name,
           data.rewards[index].url,
           data.rewards[index].expirationdate).show();
    } catch(err) { console.log("wrong coupon id ", err);}


  }

09-25 15:45