Я пытаюсь понять 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
В 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();
Data
- это простой Object
, а GetData
- это ключ с функцией как значение
var Data = {
GetData: function() {
return "data";
}
}
во втором случае:
var Data = {
Row: {
GetData: function() {
return "data";
}
}
}
Функции в 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...
}
Больше в моем блоге: Мифические методы
Попробуйте вот так:
function Data() {
this.getData = function() {
return "data";
};
this.ROW = {
getData : function() {
return "Row Data";
}
}
}
Вы вызываете функцию из нового экземпляра Data:
new Data().getData();
ИЛИ
new Data().ROW.getData();
Это вернет данные.