对象构造函数和Javascript中的返回

时间:2012-08-12 22:00:35

标签: javascript object constructor return

function makeHttpRequest(url, success) {
 $.ajax({
        url: url,
   dataType: "jsonp",
crossDomain: true,
   mimeType: 'application/javascript', 
      async: false,
    success: success
  });
} 

   var actions = {
       get_min_hit_list_bounty: function (user_id) {
          makeHttpRequest("get_min_hit_list_bounty?target_id=" + user_id + "&", function (data) {
             var data = data['body'],
                xml = convert(data);
             this.min_cost = $(xml).find('min_cost').text();

         this.cost = function () {
            return this.min_cost;
         }
      });
   }
};
var myBounty = new actions.get_min_hit_list_bounty(user);
alert(myBounty.cost());

我无法从这种类型的对象中返回任何内容。我已经阅读了很多关于使用原型和使用“this”来公开它,但我没有得到任何地方。有人可以解释为什么这不起作用?

  

TypeError:Object [object Object]没有方法'cost'

2 个答案:

答案 0 :(得分:1)

这与对象构造函数无关。

最重要的是,你会混淆异步调用的工作原理(AJAX中的第一个A!)。使用请求的结果调用makeHttpRequest中的匿名函数 - 可以是代码执行的其余部分之后的任何时间,或者根本不执行。

您需要启动代码事件驱动 - 即,在返回响应时发出AJAX请求并运行代码

例如:

var onSuccess = function(data) {
    var data = data['body'],
    xml = convert(data);
    // ... etc
}

makeHttpRequest(url, onSuccess);

答案 1 :(得分:0)

我相信它应该是这样的:

var actions = {
       get_min_hit_list_bounty: function (user_id) {
            this.userId = user_id;
            this.min_cost = 999999;

            this.cost = function () {
                return this.min_cost;
            };

            this.getMinCost = function(callback) {
                var me = this;

                var queryString = [
                "get_min_hit_list_bounty?target_id=",
                this.userId,
                "&"].join("");

                makeHttpRequest(queryString, function (data) {
                    var data = data['body'],
                    xml = convert(data);
                    me.min_cost = $(xml).find('min_cost').text();
                    callback.apply(me);
                });
            }
        }
};

var myBounty = new actions.get_min_hit_list_bounty(user);

myBounty.getMinCost(function() {
    alert(this.cost());
});

您必须了解异步代码的工作原理。它不仅仅是一组连续执行的指令。从事件和回调的角度来考虑它。 谷歌应该提供帮助。