我试图让我的头绕着使用“伪古典继承”风格的JS继承。我做了很多谷歌搜索,并阅读了经典文章。我熟悉Java的类结构,并试图理解JS的原型风格。我正在寻找香草JS,因为我想先了解基础知识。JavaScript继承范围问题
我有一个简单的父/子测试类的设置,需要一些帮助的范围规则。
1.)我什么时候在类中定义方法而不是类之外的方法?
2.)当我使用原型样式创建方法时,如何访问私有变量和私有函数?
function superClass(name){
this.name = name;
var privateValue = "I'm Private";
this.outputPrivate2 = function(){
alert(privateValue); //works fine
}
}
superClass.prototype.outputPrivate = function(){
alert(this.privateValue); //outputs undefined..
alert(superClass.prototype.privateValue) //also undefined
}
3.)子对象如何调用私有函数或访问父类的私有变量?
4.)子对象何时应该手动调用父构造函数?
subClass2.prototype = new superClass(); // Define sub-class
subClass2.prototype.constructor = subClass2;
function subClass2(name) {
this.name = name;
this.Bye = function() {
return "Bye from subClass - " + this.name;
}
this.testm = function(){
superClass.prototype.SomeParentMethod.call(this, "arg1", "arg2");
}
}
var parent = new superClass("parent");
var child = new subClass("child1");
parent.outputPrivate(); //undefined
parent.outputPrivate2(); //I'm private
child.outputPrivate(); //undefined
child.outputPrivate2(); //I'm private
我不得不在代码的80%被复制,所以我创建了一个父对象和三个子对象的三个对象。子对象具有使用和处理来自父项的私有数据的方法。我得到这个工作的唯一方法是使所有变量公开,我不喜欢。再一次,我对Java的熟悉程度,所以我可能会努力让JS像Java一样工作。
一个构造函数的范围内定义的变量和函数可以访问的唯一方法是,如果他们是通过关闭访问 – 2011-02-28 23:08:05
你能提供一个我如何访问“privateValue”的例子吗?它不需要在构造函数中。我可以设置一个包含我需要的私有数据的初始化方法。基本上我有许多方法需要能够共享的内部数据。 – David 2011-02-28 23:12:31
抱歉的错误答案〜 – Shad 2011-02-28 23:17:51