2015-08-10 4 views
0

Моя проблема заключается в том, что моя функция объекта не видна, если я вызываю ее из объекта функций. Пример кода:Javascript: вызов функции объекта из объекта функции

function foo() 
{ 
    this.bar = function() 
       { 
       alert("hit me!"); 
       } 

    this.sna = { 
       fu: function() 
         { 
          this.bar(); 
         } 
       }; 

} 

this, кажется, относится к sna вместо foo. Как я могу позвонить foo? this.parent не работает.

+0

Я предлагаю вам сделать некоторые исследования о понимании 'this' и область видимости в JavaScript - это слишком широкая тема, чтобы объяснить в короткий ответ на SO – Luca

+0

См https: // stackoverflow.com/questions/16502467/prototype-deep-scope-of-this-to-access-instances-scope. Вы не можете получить доступ к 'bar', используя' this', когда вы вызываете свой метод '... .sna.fu.bar()', так как он ссылается на '... sna.fu'. – Bergi

ответ

1

Используйте переменную для обозначения this (Foo). См this - JavaScript | MDN

function Foo() { 
 
    this.bar = function() { 
 
     console.log("hit me!"); 
 
    }; 
 

 
    var that = this; 
 

 
    this.sna = { 
 
     fu: function() { 
 
      that.bar(); 
 
     } 
 
    }; 
 

 
} 
 

 
var foo = new Foo(); 
 
foo.bar(); 
 
foo.sna.fu();

1

Один из вариантов, чтобы добавить ссылку на this:

function foo() { 

    var _t = this; 

    this.bar = function() { }; 

    this.child = { 
    this.foo = function() { 
     _t.bar(): 
    }; 
    }; 

} 
Смежные вопросы