#javascript
#javascript
Вопрос:
Я новичок в JavaScript, и я пытаюсь понять, как работает наследование, я использовал C раньше, и довольно легко обрабатывать переменные от основных классов к их потомкам, я пытаюсь использовать метод прототипа, но работает не так просто. Вот мои коды… Как правильно это сделать???
function main() {
this.name = "main object, name";
}
main.prototype.LevelA1 = function() {
return "LevelA1 method " this.name; //this level read this.name right
}
main.prototype.LevelA = function() {
this.a = "laaaa"
return "LevelA " this.name; //variable this.name is visible
}
main.prototype.LevelA.LevelB = function() {
return this.name " Level B " this.a //this.name undefined
}
main.prototype.LevelA.LevelB.LevelC = function() {
return "level C" this.name; //this.name not visible and not produce error
}
main.prototype.LevelA.LevelB.LevelC.LevelD = function() {
this.bb = "variable of levelD"
return "Level D " this.bb this.name; //this.name not visible and ot produce error
}
m = new main();
console.log(m.LevelA());
console.log(m.LevelA.LevelB());
console.log(m.LevelA.LevelB.LevelC());
console.log(m.LevelA.LevelB.LevelC.LevelD());
var cc = new m.LevelA.LevelB.LevelC.LevelD();
console.log(cc.bb);
Комментарии:
1. Я не думаю, что это имеет какое-либо отношение к вопросу или ответам, но, пожалуйста, обратите внимание, что вместо этого я заменил ваши
alert
s наlog
s.
Ответ №1:
Вы устанавливаете новые функции, а не новые прототипы, поэтому лексический контекст для каждой новой функции не имеет ничего общего с Main.prototype
.
Я рекомендую вам подходить к вашей логике с использованием классов.
Этот подход переносит функции «уровня» внутрь класса, который расширяется от Main
class.
class Main {
constructor() {
this.name = "main object, name";
}
}
class MainLevel extends Main {
LevelA1() {
return "LevelA1 method " this.name; //this level read this.name right
}
LevelA() {
this.a = "laaaa"
return "LevelA " this.name; //variable this.name is visible
}
LevelB() {
return this.name " Level B " this.a //this.name undefined
}
LevelC() {
return "level C" this.name; //this.name not visible and not produce error
}
LevelD() {
this.bb = "variable of levelD"
return "Level D " this.bb this.name; //this.name not visible and ot produce error
}
}
let m = new MainLevel();
console.log(m.LevelA());
console.log(m.LevelB());
console.log(m.LevelC());
console.log(m.LevelD());
Комментарии:
1. Привет, спасибо за ваш ответ, он решил эту конкретную проблему, но что мне действительно нужно, так это знать, как создать что-то вроде «ДЕРЕВА», где основной объект может иметь несколько объектов, а эти объекты — подобъекты и так далее… и «все дочерние элементы наследуют свойства своих предков». (* с переменными, которые не являются глобальными, поэтому они не могут мешать любому сценарию, который может использовать этот объект). как это может быть достигнуто в JavaScript?