Я пытаюсь разобраться с наследованием JS, используя стиль «псевдоклассического наследования».Я сделал много поисков Google и прочитал классические статьи.Я знаком со структурой классов Java и пытаюсь понять стиль прототипа JS.Я ищу ванильный JS, так как сначала хочу понять основы.
У меня есть простой родительский / дочерний тестовый класс, и мне нужна помощь с правилами области видимости.
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.