2012-06-19 2 views
0

Очень просто, у меня есть много классов, которые обмениваются переменными и имеют свои собственные переменные. Поэтому я создал суперкласс под названием Resource и многие подклассы. Проблема в том, что я хочу иметь возможность устанавливать и получать любую ценность. Я упростил код, но этого я не могу сделать. Имейте в виду, что в каждом классе есть много переменных, включая суперкласс, и я не хочу переопределять класс каждый раз.js prototype class.create сосуществование между переменными в подклассе и суперклассе

var MySuperClass = Class.create({ 
    initialize:function() { 
     var a; 
     var b; 
     var c; 
     //Getters 
    this.getA=function() { 
     return a; 
    }; 
    this.getB=function() { 
     return b; 
    }; 
    this.getC=function() { 
     return c; 
    }; 

    //Setters 

    this.setA=function (val) { 
     a = val; 
    }; 
    this.setB=function (val) { 
     b = val; 
    }; 
    this.setC=function (val) { 
     c = val; 
    }; 
    //end Setters 
}, 
sub:function() { 
    return this.getA()-this.getB()-this.getC(); 
} 
}); 

var MyClass = Class.create(MySuperClass, { 
    initialize:function() { 
     var d; 
     var e; 
      //Getters 
    this.getD=function() { 
     return d; 
    }; 
    this.getE=function() { 
     return b; 
    }; 
    this.getC=function() { 
     return c; 
    }; 

    //Setters 

    this.setA=function (val) { 
     a = val; 
    }; 
    this.setB=function (val) { 
     b = val; 
    }; 
    this.setC=function (val) { 
     c = val; 
    }; 
    //end Setters 
}, 
add:function() { 
    return this.getA()+this.getB()+this.getC()+this.getD()+this.getE(); 
} 
}); 

function test() { 
myclass=new MyClass(); 
myclass.setA(1); 
myclass.setB(0); 
myclass.setC(3); 
myclass.setD(2); 
myclass.setE(3); 
var result=myclass.add(); 
var result2=myclass.sub(); 
alert(result+' '+result2); 
} 

Конечно подкласса перекрывая суперкласс инициализации поэтому значения не могут быть доступны. Как я могу инициализировать переменные подкласса и переменные суперкласса, чтобы с ними можно было получить доступ из тестовой функции?

Как всегда, спасибо за вашу помощь

+0

Я нашел эту старую дискуссию, связанную с частными переменными в классах прототипов. Не очень помогает, он просто заявляет, что это непросто, и что для его выполнения прототип - это уродливое дело. [Реализация частных переменных для классов] (https://prototype.lighthouseapp.com/projects/8886-prototype/tickets/152). Есть предположения? – user1432655

ответ

0

Вы инициализация переменных Var, это означает, что он будет доступен только внутри функции инициализации. Сделать эти переменные в качестве переменной уровня класса инициализацией как следующий

initialize:function() { 
    this.a; 
    this.b; 
    this.c; 

},

getA:function() { 
return this.a; 

}

Таким образом, все эти переменные будут доступны в базовом классе, а также супер-класса.

+0

Это то, как я сейчас работаю, но я хотел бы, чтобы переменные были закрытыми и доступными только через get и sets. Если я объявлю их «этим», я могу напрямую обращаться к переменным. – user1432655

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