2016-05-26 3 views
2

Воспользуйтесь приведенным ниже примером;Вложенная ссылка на `this` в классах ES6

class MyClass { 
    run() { 
    this.hello = 1; 
    co(function*() { 
     this.hello // this is now 'undefined' 
    }) 
    } 
} 
new MyClass().run() 

В ES5 я обычно назначить this другой переменной в начале функции, такие, как var cls = this, но я хотел бы надеяться, что ES6/ES7 бы, решили эту проблему в настоящее время.

Есть ли лучший способ сделать это?

+1

Параметр 'this' задача решается с помощью функций стрелок, за исключением того, что синтаксис функции стрелка не поддерживает генератор. Поэтому либо используйте 'bind', либо используйте' const' (вместо var). – Sheepy

ответ

2

Вы можете использовать bind:

class MyClass { 
    run() { 
    this.hello = 1; 
    co(function*() { 
     this.hello // 1 
    }.bind(this)); 
    } 
} 
new MyClass().run() 
+0

Если я использую '.bind()', то как бы я ссылался на 'co.this'? – sleepycal

+1

@sleepycal 'co'' '' '' '' '' global', вам это не нужно. Обычно 'bind' не подходит для функций генератора, но безопасно использовать его с' co'. – estus

+0

@estus Для libs, отличных от 'co', есть ли лучший способ или переустанавливает стандарт' cls = this'? – sleepycal

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