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

Ash*_*ain 11 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();  
   return result; 
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Hug*_*are 26

当您使用来识别Javascript中的任何内容时,您必须要小心,因为每次更改范围时"此"都会更改.

将'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'
    };

};
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 5

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

问题是,C对象上不存在A,因为它是在内部定义的B.如果你要调用一个本地函数C()B,只要使用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; 
}
Run Code Online (Sandbox Code Playgroud)