如何调用同一对象内的对象的函数?

时间:2010-04-18 07:30:52

标签: javascript oop

我有以下Javascript代码

add_num = {
  f: function(html, num) {
    alert(this.page);
  },

  page : function() {
    return parseInt(this.gup('page'));
  },

  gup : function(name) {
    name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
    var regex = new RegExp('[\\?&]'+name+'=([^&#]*)');
    var results = regex.exec(window.location.href);
    if(results == null)
      return '';
    else
      return results[1];
  }
}

但是当我调用add_num.f()时,我从alert()获得的是实际的页面代码。也就是说,它返回

function() {
    return parseInt(this.gup('page'));
  }

我期待一个数值,而不是任何代码。

3 个答案:

答案 0 :(得分:8)

那是因为你需要调用page函数:

alert(this.page());

而不是

alert(this.page);

答案 1 :(得分:5)

原因是文字不是函数,因此没有(可见)构造函数,所以'this'将引用调用对象。

当然,如果您使用将此文字指定给函数的原型,则不是这样,但我猜这不是这种情况。

此外,Darin是正确的,你正在返回该函数,而不是执行它。

明确地引用该对象,例如add_num.page()。

add_num = {
  f: function(html, num) {
    alert(add_num.page());
  },

  page : function() {
    return parseInt(add_num.gup('page'));
  },

  gup : function(name) {
    name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
    var regex = new RegExp('[\\?&]'+name+'=([^&#]*)');
    var results = regex.exec(window.location.href);
    if(results == null)
      return '';
    else
      return results[1];
  }
}

答案 2 :(得分:4)

您正在警告函数本身,而不是执行它的结果。 你应该这样做:

alert(this.page());