2016-06-23 3 views
0

Я пытаюсь получить this внутри самостоятельного вызова функции как этотКак связать этот контекст с функцией самозапуска?

// this is defined here and works just fine. 
(function(){ 
    this.doSomething() 
    // this is undefined here. 
}/*tried .bind(this) here, but it didn't seem to help*)(); 

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

Как передать this контекст функции самозапускания, подобной выше, кроме var self = this вне функции, а затем обращаясь к ней изнутри как self.doSomething()?

+0

'(функция (self) { self.doSomething(); }) (это);'? –

+0

Функция стрелки? –

ответ

0

То, как вы пытались, должно работать нормально. Я создал небольшую функцию-обертку под названием test, чтобы продемонстрировать:

function test() { 
    (function(){ 
     this.doSomething() 
    }.bind(this))(); // bind this here 
} 

test.call({ 
    doSomething: function() { 
     console.log('hello world'); 
    } 
}); // call test with a dummy object as this 
+0

Похоже, что у меня проблема с многократно вложенными функциями, а не в часть кода, которую я разделял. –

0

Я не думаю, что .bind() методы работы на функции самостоятельно, ссылающегося. так что моя работа вокруг, что это ...

var that = this; (function(that){ that.doSomething() })(that);

название «это» к чему-то еще, как «я» или в моем примере «что», потому что если вы используете «это» ключевое слово в функции самопроверки вызывающем он будет ссылаться на «это» на функцию самозапуска. Поэтому просто передайте переменную через функцию self invoking через параметры. Надеюсь, это поможет.