Как вложить объекты и совместно использовать переменные, используя прототип, имеющий несколько объектов подпрототопа?

#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?