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

fen*_*ent 13 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];
  }
}
Run Code Online (Sandbox Code Playgroud)

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

function() {
    return parseInt(this.gup('page'));
  }
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 9

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

alert(this.page());
Run Code Online (Sandbox Code Playgroud)

代替

alert(this.page);
Run Code Online (Sandbox Code Playgroud)


Sky*_*ers 6

原因是文字不是函数,因此没有(可见)构造函数,所以'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];
  }
}
Run Code Online (Sandbox Code Playgroud)