2013-11-21 6 views
1

Я работаю с некоторыми рефакторингами типов скриптов, связанных с dataContext. Дело в том, что вчера я потратил много времени, пытаясь понять, почему я не получал легкий ветер. Из моего нового документа datacontext. наконец, я получил решение, и это было связано с объемом «этого». Пример плохого использования «это»:Использование «this» в машинописном классе

public getSomething(){ 
    return this.manager.executeQuery(query) 
     .then(function (data) {    
      //THIS IS NOT WORKING" INSIDE OF THE FUNCTION 
      this.log('this log will never be loged :('); 
     } 
} 

Теперь тот же код работает отлично, но с использованием «что» в качестве переменной TEMP:

public getSomething(){ 
    var that=this; 
    return this.manager.executeQuery(query) 
     .then(function (data) {    
      that.log('get something is complete'); 
     } 
} 

, если вы видите в abore второй части код работает нормально, но я должен повторить процесс для каждого метода в моем классе. Теперь мой вопрос: Как я могу создать переменную «this» на уровне класса? это возможно?

Я попытался с кодом ниже, но я получаю ошибку компиляции: «Не удалось найти символ», что ».

export class eventDataContext extends dataContextBase.dataContextBase { 
    public that; 

    constructor() {   
     super(); 
     that = this; 
    ... 
    } 
} 

любая идея, как поставить эту новую переменную «что» на уровне класса? Спасибо!

+0

[JavaScript: зачем понимать сферу и закрытие материи] (http://doctrina.org/JavaScript:Why-Understanding-Scope-And-Closures-Matter.html) является хорошим чтением – Satpal

+0

bind должен поэтому трюк https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind – rafaelcastrocouto

+0

спасибо @SteveFenton дал мне короткий четкий ответ! – Rolando

ответ

3

Машинопись имеет удобный ярлык, чтобы решить эту проблему, которая называется «жира стрелка синтаксис» =>

Если вы используете следующее, он должен работать для вас:

getSomething(){ 
    return this.manager.executeQuery(query) 
     .then((data) => {    
      this.log('This *will* now be logged :)'); 
     }); 
} 

Быстрый отказ от ответственности - Я не знаю, откуда идет ваш query - он не передается в метод getSomething. Если это свойство класса, используйте this.query.

+0

очень приятно! Спасибо! – Rolando

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