Общедоступный массив недоступен в классе js

#javascript #oop

#javascript #ооп

Вопрос:

вот часть урока :

 function Table(seats){
    //editables
        var leaveTable_position=new Array('380','0','102','20');

    //runtime
        Table.id=0;
        Table.max_buy=0;
        Table.min_buy=0;
        Table.player_timeout=0;

    //on creation
        Table.seat=new Array();
        if (seats<5){seats=5;}
        if (seats>5){seats=9;}
        for (var i=1 ; i<=seats ; i  ){
            Table.seat[i]=new Seat(i);
            Table.seat[i].create();
        }}
  

вы видите Таблицу.разместить общедоступный массив?
предполагая, что у меня есть 3 места (table.seat[0]; table.seat[2];) …

следующий код выдает мне «место не определено» !!!

 table=new Table();
table.seat[2].getUser();
  

есть какие — нибудь идеи , почему ? я не настолько хорош в js ооп !

Комментарии:

1. Возможно, вы захотите прочитать это руководство MSDN по ООП-программированию на javascript: developer.mozilla.org/en /… . В частности, что javascript — это программирование на основе прототипов, в котором «это стиль объектно-ориентированного программирования, в котором классы отсутствуют, а повторное использование поведения (известное как наследование в языках, основанных на классах) осуществляется посредством процесса оформления существующих объектов, которые служат прототипами»

Ответ №1:

Вы должны использовать this вместо таблицы. При использовании Table вы изменяете свойства Table функции.

При использовании this свойства определяются в текущем экземпляре Table «класса». Если вы все еще хотите добавить префикс Table , объявите var Table = this внутри своей функции. Побочным эффектом этого является то, что вы больше не можете напрямую вызывать Table() изнутри функции.

 function Table(seats){
        var Table = this;
    //editables
        var leaveTable_position=new Array('380','0','102','20');

    //runtime
        Table.id=0;
        Table.max_buy=0;
        Table.min_buy=0;
        Table.player_timeout=0;

    //on creation
        Table.seat=new Array();
        if (seats<5){seats=5;}
        if (seats>5){seats=9;}
        for (var i=1 ; i<=seats ; i  ){
            Table.seat[i]=new Seat(i);
            Table.seat[i].create();
        }}
  

Ответ №2:

Не используйте Table use this .

Например:

 //runtime
    this.id=0;
    this.max_buy=0;
    this.min_buy=0;
    this.player_timeout=0;
  

Смотрите скрипку:http://jsfiddle.net/maniator/a7H57/3 /