#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 /