【问题标题】:javascript object oriented call function inside function or call function insede var函数内部的javascript面向对象的调用函数或var内部的调用函数
【发布时间】:2013-11-29 10:36:47
【问题描述】:

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

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

我从其他 oop 语言中了解到我只是创建这样的类:

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

【问题讨论】:

    标签: javascript jquery html oop


    【解决方案1】:

    在 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();
    

    【讨论】:

      【解决方案2】:

      Data 是一个简单的ObjectGetData 是一个以函数为值的键

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

      第二种情况:

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

      【讨论】:

        【解决方案3】:

        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

        【讨论】:

          【解决方案4】:

          试试这样:

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

          你从一个新的数据实例调用函数:

          new Data().getData();
          

          new Data().ROW.getData();
          

          这将返回数据。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-10-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-19
            • 2022-09-29
            • 2012-01-12
            相关资源
            最近更新 更多