【问题标题】:How do I call functions of an object inside the same object?如何在同一个对象中调用对象的函数?
【发布时间】:2010-04-18 07:30:52
【问题描述】:

我有以下 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'));
  }

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

【问题讨论】:

  • 您实际上并没有调用函数——只是将它作为对象传递给alert()。试试alert(this.page());

标签: javascript oop


【解决方案1】:

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

alert(this.page());

而不是

alert(this.page);

【讨论】:

    【解决方案2】:

    原因是文字不是函数,因此没有(可见的)构造函数,因此“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];
      }
    }
    

    【讨论】:

    • 使用this 而不是显式调用对象是不好的做法吗?
    【解决方案3】:

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

    alert(this.page());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2013-03-02
      • 1970-01-01
      • 2013-03-29
      相关资源
      最近更新 更多