2014-10-11 7 views
1

Foo - это функция с открытым членом, называемым списком. Он имеет функцию открытого участника, называемую setList. Я хочу иметь возможность редактировать список из setList. Я могу это сделать? Я попытался несколько вещей, но мне не удалось даже получить доступ к списку из setList.Функция члена функции доступа от функции-члена

var Foo = function Foo() { 

    this.list = ["a", "b", "c"]; 

    this.setList = function(data) { 
     // Attempt 1 
     console.log(list); // Uncaught ReferenceError: list is not defined 
     // Attempt 2 
     console.log(this.list); // undefined 
     // Attempt 3 
     console.log(Foo.list); // undefined 
    } 
} 

Я все еще считаю JS вне, поэтому, пожалуйста, простите меня, если я вызвал что-то по неправильному имени.

+0

Как вы называете этот код? Кроме того, почему вы используете именованное закрытие как конструктор? –

+0

Значение 'this' определяется * как функция вызывается *. Не зная, как вы называете 'setList', мы не можем вам помочь. Предполагая, что вы все делаете правильно, 'this.list' должен работать. Возможно, посмотрите [MDN - Введение в объектно-ориентированный JavaScript] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript). –

ответ

1

Предполагая, что вы создаете экземпляры с Foo:

function Foo() 
{ 
    this.list = ["a", "b", "c"]; 

    this.setList = function(data) { 
     this.list = data; 
    } 
} 

var x = new Foo(); 
console.log(x.list); // a,b,c 
x.setList([]); 
console.log(x.list); // empty array 
0

Вы также можете установить прототип, который позволит получить те же результаты. Я мог бы объяснить причины, почему иногда вы можете захотеть использовать прототип, но эта ссылка содержит полезную информацию по этому вопросу http://thecodeship.com/web-development/methods-within-constructor-vs-prototype-in-javascript/

function Foo(){ 
    this.list = [1,2,3]; 
} 

Foo.prototype = { 
    setList: function(data){ 
    this.list = data; 
    } 
}; 

var x = new Foo(); 
x.setList(['hello', 'hi']); 
console.log(x.list); 

это будет регистрировать массив, переданный в x.setList, который [ «привет», «привет '], показывающий, что список был обновлен.

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