javascript объектно-ориентированная функция вызова внутри функции или функции вызова

0

Я пытаюсь понять javascript сейчас, чего я действительно хочу добиться, это примерно так:

var data = Data.GetData();//with or without parameter Data.GetData(x)
//or
var data = Data.Row.GetData();

что я понимаю из другого умного языка, я просто создаю класс следующим образом:

Class Data{
  public static String GetData()
  {
     return "data";
  }
}

Поэтому я могу позвонить:

String data = Data.GetData();
//or
Data _data = new Data();
String x = _data.GetData();

но как в javascript? я так думаю:

function Data(){
  function GetData(){
    retun "data";
  }
}

но это не сработало. :( Пожалуйста, помогите мне понять, как сделать это в javascript, с примером кода: D

Теги:
oop

4 ответа

5
Лучший ответ

В javascript вы можете объявить функцию как конструктор (убедившись, что он ничего не возвращает), а затем методы для этого класса применимы ко всем его экземплярам с помощью прототипального наследования.

function Data () {
}
Data.prototype.GetData = function () {
  return 'data';
}

вы можете использовать его так:

var data = new Data();
var str = data.GetData();

если вы хотите статический метод, вы можете опустить ключевое слово prototype

Data.GetData = function () { return 'data'; }

Если вместо этого объект Data является единственным объектом, и вы не хотите повторно использовать какие-либо его методы и члены, вы можете просто объявить его следующим образом:

var Data = {
  GetData: function () { return 'data'; }
};

и затем

Data.GetData();
  • 0
    спасибо приятель, это действительно поможет мне
2

Data - это простой Object, а GetData - это ключ с функцией как значение

var Data = {
    GetData: function() {
           return "data";
     }
}

во втором случае:

var Data = {
    Row: {
         GetData: function() {
               return "data";
         }
    }
}
  • 0
    спасибо приятель, это действительно поможет мне
1

Функции в JavaScript - это объекты первого класса. "Методы" - это просто свойства объектов, которые указывают на функции. Акт вызова функции с помощью ссылки собственности является немного особенным, в том, что он устанавливает значение this внутри вызова функции (this устанавливается на объект свойство было включено). В отличие от некоторых других языков, к которым вы можете привыкнуть, это время выполнения, определяемое тем, как вызывается функция, а не время компиляции, определяемое тем, где функция объявлена /определена.

Чтобы это сделать:

var data = Data.GetData();

... вам нужно иметь объект Data, который имеет свойство GetData которое ссылается на функцию. Вы можете построить так:

var Data = {
    GetData: function() {
        // ...your code here...
    }
};

... или любой другой способ, например:

var Data = {};
Data.GetData = function() {
    // ...your code here...
};

...или

var Data = {};
Data.GetData = GetData;
function GetData() {
    // ...your code here...
}

Больше в моем блоге: Мифические методы

1

Попробуйте вот так:

function Data() {

    this.getData = function() {
        return "data";
    };

    this.ROW = {
        getData : function() {
            return "Row Data";
        }
    }
}

Вы вызываете функцию из нового экземпляра Data:

new Data().getData();

ИЛИ

new Data().ROW.getData();

Это вернет данные.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню