2014-10-27 5 views
0

Прошу прощения за этот вопрос, только начинающий изучать Javascript.Как сделать переменную доступной в методах класса?

У меня есть 2 метода:

Manager.prototype.filters = function() { 
     var user = []; 
      ... 

Manager.prototype.filters_main = function() { 
     var user = []; 
      ... 

мне нужно сделать свойство 'пользователя' доступны для 2 методов (фильтры, filters_main). Чтобы они могли использовать общую переменную (пользователя). Как можно писать?

+1

Поместите его в тело: 'function Manager() {this.user = [];' –

+0

Между Manager.prototype. ...? А что я должен писать в прототипах? –

ответ

0

Определить переменную в вашем Manager определения:

function Manager() { 
    this.user = []; 
} 

И теперь вы должны быть в состоянии использовать его в функции фильтра:

Manager.prototype.filters = function() { 
    // Use it: 
    if (this.user.indexOf(...) != -1) { 
     ... 
    } 
}; 

Тогда вы можете продолжать как обычно:

var manager = new Manager(); 
manager.user = ["user1", "user2"]; 
var filters = manager.filters(); 
0

Добавить его в тело:

function Manager() { 
    this.user = []; 
} 

Manager.prototype.filters = function() { 
    alert(this.user) 
} 

var m = new Manager(); 
m.user = [11,22,33] 
m.filters(); 
1

Здесь вы должны понимать наследование на основе прототипов.

var Manager = function() { 
    this.user = []; 
} 

var manager = new Manager(); 

Эти линии будут определять Manager функцию конструктора и создать новый объект. При вызове new Manager(), что случается:

  1. новый, пустой, объект создается: {}.

  2. код внутри конструктора будет запущен с новым, пустым объектом, являющимся значением this. Таким образом, он будет устанавливать свойство user нового объекта ({}) как пустой массив.

  3. Свойство нового объекта будет установлено в значение Manager.prototype. Итак, это происходит, если вы не видите: manager.__proto__ = Manager.prototype.

Затем вы хотите определить новые методы на объектах прототипа, используя наследование. Имейте в виду, что прототип представляет собой простой объект JS. Не конструктор, а объект. Таким образом, каждый объект, созданный из функции Manager, будет обладать свойством __proto__, установленным на тем же самым объектом.

Затем вы начинаете определять новые методы на объекте прототипа, например, функцию filters. Когда вы, позднее, позвоните по телефону manager.filters(), он сначала найдет свои свойства для функции filters и не найдет его. Итак, тогда он пойдет на свои свойства прототипа, и там, если найдет его. manager затем запустит функцию filters, которая была определена на прототипе, но сама использует (manager) как контекст, как this внутри функции.

Таким образом, чтобы использовать user свойство внутри функции filters, все, что вам нужно сделать, это:

Manager.prototype.filters = function() { 
    this.user = ...; 
} 

Manager.prototype.filters_main = function() { 
    this.user = ...; 
} 

и вы будете манипулировать же user свойство определено, когда объект был построен.

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