在js类中无法访问公共数组

时间:2011-11-04 17:06:33

标签: javascript oop

这是课程的一部分:

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();
        }}

你看到Table.seat公共数组? 假设我有3个席位(table.seat [0]; table.seat [2];)...

以下代码告诉我'座位未定义'!!!

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

任何想法为什么?在js oop中不是那么好!

2 个答案:

答案 0 :(得分:4)

您必须使用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();
        }}

答案 1 :(得分:3)

请勿使用Table使用this

例如:

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

请参阅小提琴:http://jsfiddle.net/maniator/a7H57/3/