2016-03-10 2 views
-1

Честно говоря, я не уверен, в чем причина поведения: systemjs, babel или моя собственная ошибка. Я использую класс для настраиваемого контроллера управления и сохраняю ссылку на класс в собственной переменной. По-видимому, это становится чрезмерным с помощью любых последующих экземпляров контроллера.Как правильно сохранить самостоятельную ссылку с классами ES6?

Я создал простой репозиторий для демонстрации: клон, установить, запустить live-сервер или ваш предпочтительный сервер. Вы увидите две кнопки, каждая из которых является настраиваемым элементом управления. Нажатие на кнопку влияет только на один элемент управления.

https://github.com/alexkolt/selfIsThis

Как я могу получить эту работу с классом ES6?

+0

У вас есть один 'self' для всех экземпляров контроллера. В чем смысл «сам»? – zeroflagL

+1

Пожалуйста, разместите свой код (или соответствующие его части) в своем вопросе, вместо того, чтобы связывать некоторый репозиторий github. – Bergi

ответ

0

Вы действительно не используете классы ES6. Вам не нужно сохранять ссылку на this - просто получите доступ к ней непосредственно в методах класса. То, как у вас есть это в любой момент, все ваши экземпляры CustomControlController используют одну переменную self.

class CustomControlController { 
    constructor() { 
     this.value = 0; 
    } 

    click() { 
     var newValue = this.value * 2; 
     this.value = newValue; 
    } 
} 

export default CustomControlController; 
0

Я должен был опубликовать код, извините.

Причина, по которой вы хотите сохранить ссылку на себя, например, в обратных вызовах, вызывающих это, может привести к другой ссылке. Я пытался сделать это:

 

    var self; 
    class Test { 
     constructor(dependency) { 
      self = this; 
      self.dependency = dependency; 
     } 
     method() { 
      self.dependency().then(value => self.property = value); 
     } 
    } 

Как указывалось ранее, само становится общим, когда объявлена ​​вне модуля. Я не понимал, что это произойдет, поскольку файлы будут завернуты в закрытие. Ответ Джо Клэя правильный, но делать то, что я пытаюсь сделать сам, должно быть объявлено в каждом методе, который ему нужен.

 

    class Test { 
     constructor(dependency) { 
      this.dependency = dependency; 
     } 

     method() { 
      var self = this; 
      this.dependency().then(value => self.property = value); 
     } 
    } 

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