2016-02-15 2 views
0

Как мне получить доступ к массиву open, который прототипирован от removeConnection()? Прямо сейчас я получаю ReferenceError: open is not defined, когда я вызываю функцию.Доступ к прототипу из функции прототипа

function Connections() {} 
Connections.prototype.open = []; 

Object.defineProperty(Connections.prototype, 'total', { 
    get: function total() { 
    return this.open.length; 
    } 
}); 

Connections.prototype.removeConnection = function(res) { 
    this.open = open.filter(function(storedRes) { 
    if (storedRes !== res) { 
     return storedRes; 
    } 
    }); 
} 

var connections = new Connections(); 

ответ

2

Для меня это вызывает другую ошибку Uncaught TypeError: open.filter is not a function и исправление изменить this.open = open.filter к this.open = this.open.filter.

См работоспособный пример:

function Connections() {} 
 
Connections.prototype.open = []; 
 

 
Object.defineProperty(Connections.prototype, 'total', { 
 
    get: function total() { 
 
    return this.open.length; 
 
    } 
 
}); 
 

 
Connections.prototype.removeConnection = function(res) { 
 
    this.open = this.open.filter(function(storedRes) { 
 
    if (storedRes !== res) { 
 
     return storedRes; 
 
    } 
 
    }); 
 
} 
 

 
var connections = new Connections(); 
 

 
connections.open = ['one', 'two'] 
 
alert(connections.open) 
 
connections.removeConnection('one') 
 
alert(connections.open)

1

Вам не хватает this.

Connections.prototype.removeConnection = function(res) { 
    this.open = this.open.filter(function(storedRes) { 
    if (storedRes !== res) { 
     return storedRes; 
    } 
    }); 
} 
Смежные вопросы