在javascript中的另一个方法内调用方法?

在javascript中的另一个方法内调用方法?,javascript,methods,Javascript,Methods,我有一个JavaScript名称空间 A={ CA: function() { this.B(); }, B: function() { var test='test'; var result='t1'; C: function() { this.test='test1'; ..... ..... return 'test1'; } result=this.C();

我有一个JavaScript名称空间

A={

  CA: function() {
    this.B();
  },
  B: function() {
    var test='test';
    var result='t1';

    C: function() {
      this.test='test1';
      .....
      .....
      return 'test1';    
    }

   result=this.C();  
   return result; 
  }
}

现在,当我执行这样的代码时,它给出了TypeError:this.C不是一个函数。有人能告诉我为什么会这样吗。我知道这与词法范围有关,但我无法理解。

我认为问题在于,当
this.C()
B
引用的函数中执行时,
this
指的是包含
B
的对象,即对象
A
。(假设在
A
的上下文中调用
B()

问题是,
C
在对象
A
上不存在,因为它是在
B
中定义的。如果要调用
B
中的本地函数
C()
,只需使用
C()

编辑: 另外,我不确定您发布的是有效的JavaScript。具体来说,
B
应该这样定义,因为不能在函数中使用object:property语法

B: function()
{
  var test='test';
  var result='t1';

  var C = function()
  {
    this.test='test1';
    return 'test1';    
  }

 result=C();  
 return result; 
}

事实上,我很惊讶您的代码没有在“C:”行上给出错误

无论如何,您定义函数的语法不正确。使用var关键字定义它。另外,请注意,我创建了“闭包”,以便函数C可以访问“this”。请参阅下面的代码:

A={

  CA: function()
  {
    this.B();
  },

  B: function()
  {
    var test='test';
    var result='t1';

    var self = this;
    var C = function()
            {
              self.test='test1';
              .....
              .....
              return 'test1';    
            }

   result=C();
   return result; 
  }
}
如果要将C指定给“this”对象,还可以执行以下操作:

A={

  CA: function()
  {
    this.B();
  },

  B: function()
  {
    var test='test';
    var result='t1';

    var self = this;
    this.C = function()
             {
              self.test='test1';
              .....
              .....
              return 'test1';    
             };

   result= this.C();
   return result; 
  }
}

当您使用它来识别Javascript中的任何内容时,必须小心,因为每次更改范围时,“this”都会更改

将“this”引用分配给它自己的变量有助于解决这个问题

var a = new function() {
    var self = this;

    self.method = function() { alert('hiya'); };

    var b = function() {
        this.method(); // this isn't 'a' anymore?
        self.method(); // but 'self' is still referring to 'a'
    };

};

从另一个方法调用方法的解决方案。(基本上,指针“this”必须指定给变量,并使用新变量来代替该变量。)


此示例显示如何使用函数实例从另一个方法内部或外部调用方法

您将无法使用“this”,因为“this”是一个关键字,您确实需要创建闭包。另外,因为我将“self”定义为局部变量,它不会影响全局对象。是的,对不起,我意识到我的愚蠢,因此删除了我的评论:-(是的,现在我同意你的答案。+1因为我也容忍了我:-)我认为你是正确的,最后我也是这样做的(生成函数并直接从外部函数调用)在我努力使这个.C工作之后。对不起,我是一个新用户,发布了第一个问题,不知道如何发布问题。我现在会记住这一点。谢谢。var self=这正是我想要的!谢谢!这正是我需要的,非常感谢。
 function myfunction(){
    var me = this;

    me.method1 = function(msg){ alert(msg); }

    me.method2 = function(){ 
       me.method1("method1 called from method2"); 
    }
 }

 var f as new myfunction();
 f.method2();