js prototype class.create子类和超类中变量之间的共存

时间:2012-06-19 17:17:13

标签: javascript prototypejs prototype-programming

非常简单地说,我有很多共享变量并拥有自己变量的类。所以我创建了一个名为Resource的超类和许多子类。问题是我希望能够设置并获得任何值。我简化了代码,但这是我不能做的。请记住,每个类中有许多变量,包括超类,我不想每次重新定义类。

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

当然,子类会覆盖超类初始化,因此无法访问这些值。如何初始化子类变量和超类变量,以便可以从测试函数中访问它们?

一如既往,感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您正在初始化var变量,这意味着它只能在initialize函数中使用。通过像下面的

一样初始化,将这些变量作为类级变量
initialize:function () {
    this.a;
    this.b;
    this.c;  

},

getA:function () {
return this.a;

}

这样所有这些变量都可以在基类和超类中使用。