函数内部的javascript面向对象调用函数或var内部的调用函数

时间:2013-11-29 10:36:47

标签: javascript jquery html5 oop

我现在尝试了解javascript 我真正想要实现的是这样的:

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

我从其他oop languange的理解我只是创建这样的课程:

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";
  }
}

但它不起作用。 :( 请帮助我了解oop如何在javascript中进行此操作,例如代码:D

4 个答案:

答案 0 :(得分:5)

在javascript中,您可以将函数声明为构造函数(通过确保它不返回任何内容),然后通过使用原型继承将该类的方法应用于其所有实例。

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

然后您可以像这样使用它:

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

如果你想要一个静态方法,你可以省略原型关键字

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

如果您的Data对象是单个对象,并且您不想重用其任何方法和成员,则只需将其声明为:

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

然后再做

Data.GetData();

答案 1 :(得分:2)

Data是一个简单的ObjectGetData是一个功能为值的键

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

在第二种情况下:

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

答案 2 :(得分: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...
}

更多关于我的博客:Mythical methods

答案 3 :(得分:1)

试试这样:

function Data() {

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

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

您从新的数据实例调用该函数:

new Data().getData();

OR

new Data().ROW.getData();

这将返回数据。