Методы Javascript из суперкласса

#javascript

#javascript

Вопрос:

Я новичок в javascript, поэтому некоторые из существующих ответов на StackOverflow меня смутили.

Если у меня есть статический класс внутри динамического класса (как показано ниже). Как я могу получить доступ к переменным внутри динамического класса?

 function ListItem() = {
  var myItem = function() { return "something" };

  ...
  ItemDropdown = function(){
     show : function (){
       //Want to access the ListItem's myItem here
       alert(super.myItem()   "dropdown menu");
     }
  }
}


var foo = new ListItem();
foo.ItemDropdown.show();
  

Комментарии:

1. ваше форматирование содержит синтаксические ошибки, такие как функция x() = {

2. В JavaScript нет классов. По крайней мере, не в том смысле, в каком, скажем, Java. Возможно, вам захочется прочитать, что MDN говорит по этому вопросу . Обратите внимание также, что this в JavaScript работает совсем не так, как в Java или C #.

Ответ №1:

Если вы хотите ItemDropdown быть методом ListItem , вам нужно объявить его с помощью this .

 this.ItemDropdown = {
  

С тем, как вы myItem определили, вы можете просто вызвать его самостоятельно.

 alert(myItem()   "dropdown menu");
  

У вас также есть пара синтаксических ошибок:

 function ListItem() = {
// Should be
function ListItem() {
  

и

 ItemDropdown = function(){
// Should be
this.ItemDropdown = {
  

Итак, в итоге вы получаете следующее:

 function ListItem() {
  var myItem = function() { return "something" };

  this.ItemDropdown = {
     show : function (){
       alert(myItem()   "dropdown menu");
     }
  }
}
  

Ответ №2:

Прежде всего, Javascript — это не наследование на основе классов, это наследование на основе прототипов. Вам нужно использовать такие термины, как «конструктор функций». Если вы исходите из «традиционного» языка наследования на основе классов, тогда проверьте это.

При этом, если вы хотите, чтобы это работало:

 var foo = new ListItem();
foo.ItemDropdown.show();
  

Тогда ItemDropdown должно быть свойство ListItem определения (например: конструктор функций) — что означает, что вам нужно использовать this .

Ответ №3:

использовать this

 function ListItem()  {
  var myItem = function() { return "something" };

  ...
  this.ItemDropdown = {
     show : function (){
       //Want to access the ListItem's myItem here
       alert(myItem()   "dropdown menu"); // no super in javascript
     }
  }
}
  

Я исправил ошибки:

  1. ) ListItem() = {
  2. ) это.ItemDropdown = function () { // затем литеральная разметка объекта