Вопрос по methods, javascript – Вызов метода внутри другого метода в JavaScript?

10

У меня есть пространство имен 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 не является функцией. Может кто-нибудь сказать мне, почему это так. Я знаю, что это связано с лексическим ограничением, но я не могу этого понять.

Извините, я новый пользователь и опубликовал первый вопрос, не знаю, как публиковать вопросы. Я буду помнить это теперь и дальше. Благодарю. Ashish Jain

Ваш Ответ

4   ответа
5

this.C() выполняется внутри функции, на которую ссылаетсяB, this относится к объекту, который содержитBобъектA, (Это предполагаетB() называется в контекстеA)

Проблема в,C не существует на объектеAпоскольку оно определено вB, Если вы хотите вызвать локальную функциюC() вB, просто используйтеC().

РЕДАКТИРОВАТЬ: Кроме того, я не уверен в том, что вы опубликовали правильный JavaScript. В частности,B должен быть определен таким образом, так как вы не можете использовать синтаксис object: свойство внутри функции.

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

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

 result=C();  
 return result; 
}
Я думаю, что вы правы, и я наконец сделал то же самое (сделал функцию и вызвал ее непосредственно из внешней функции) после того, как ударил меня по голове, чтобы заставить это работать. Ashish Jain
0

указатель «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();

В этом примере показано, как можно вызвать метод из другого метода или извне, используя экземпляр функции.

4

линия.

В любом случае, ваш синтаксис для определения функции неверен. Определите это, используя ключевое слово 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; 
  }
}

Если вы хотите назначить С на «этот» объект, вы также можете сделать:

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; 
  }
}
да, извини, я осознал свою глупость и, следовательно, удалил свой комментарий :-( Но да, теперь я согласен с твоим ответом. +1 за то, что терпел меня тоже :-)
Вы не сможете использовать «этот»; потому что "это" является ключевым словом, и вам нужно создать закрытие. Кроме того, потому что я определяю «себя» как локальная переменная, она не повлияет на глобальный объект.
23

this идентифицировать что-либо в Javascript, потому что каждый раз, когда вы изменяете область действия «это» изменения.

Назначение «этого» ссылка на собственную переменную помогает обойти это.

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

};
var self = this; это именно то, что я искал! Спасибо!
Это именно то, что мне было нужно, большое спасибо.

Похожие вопросы