繁体   English   中英

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

[英]Calling method inside another method in javascript?

我有一个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不是一个函数。 有人可以告诉我为什么会这样。 我知道这与词汇范围有关,但我无法理解这一点。

当您使用来识别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'
    };

};

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

问题是,对象A上不存在C ,因为它是在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; 
  }
}

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

 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();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM