【问题标题】:js prototype class.create coexistance between variables in subclass and superclassjs原型class.create子类和超类中的变量共存
【发布时间】:2012-06-19 17:17:13
【问题描述】:

简单地说,我有很多类共享变量并拥有自己的变量。所以我创建了一个名为 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);
}

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

一如既往,感谢您的帮助

【问题讨论】:

  • 我发现这个古老的讨论与原型类中的私有变量有关。没有多大帮助,它只是说明这不是一件容易的事,而且要完成它原型是一件丑陋的事情。 Implement private variables for classes。有什么想法吗?

标签: javascript prototypejs prototype-programming


【解决方案1】:

您正在初始化 var variables ,这意味着它仅在初始化函数中可用。通过如下初始化使这些变量成为类级别变量

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

},

getA:function () {
return this.a;

}

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

【讨论】:

  • 这是我目前的工作方式,但我希望变量是私有的,并且只能通过获取和设置访问。如果我将它们声明为“this”,我就可以直接访问这些变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
相关资源
最近更新 更多