【问题标题】:When should I use data type classes in JavaScript什么时候应该在 JavaScript 中使用数据类型类
【发布时间】:2013-10-19 21:50:09
【问题描述】:

我来自 C# 背景。我最近一直在使用 JavaScript。在一个新应用程序上,我有一个 mysql/php 后端。我要来回传递很多“类型”。

所以在我的数据库中,我有几个表格,例如

table1
id, fieldx,fieldy,fieldz

table2
id, fielda,fieldb,fielc

在 c# 中,我肯定会为代码中的所有内容编写类。这导致我实现了这样的事情(在我的 JavaScript 应用程序中):

function table1(id, x,y,z){
    this.id=id;
    this.x=x;
    this.y=y;
    this.z=z;
}

在大约 6 桌之后,我突然想到,制作这些课程可能根本没有意义。

所以我的问题是,在 JavaScript 应用程序中,我是否将“类”用于数据类型?或者我应该只是“记录”哪些字段/类型是预期的,所以在代码中而不是

a.push(new table1(5,1,2,3));

我会的

a.push({id:5,x:1,y:2,z:3});

这似乎是一个偏好问题,但这是我在尝试了解如何在 JavaScript 中为我的应用程序数据建模时遇到的一个基本语言问题。这些类有什么优势(只有数据字段)还是只是一个错误。谢谢。

【问题讨论】:

    标签: javascript class architecture business-objects


    【解决方案1】:

    视情况而定,
    注意:大多数来自强大的 OO 语言的程序员在 JavaScript 的函数行为方面都会遇到像你一样的麻烦(你并不孤单)。

    如果您想创建更接近 C# 的内容,我会执行以下操作:

    function Table1(id, x, y, z) {
      this.id=id;
      this.x=x;
      this.y=y;
      this.z=z;
    }
    
    Table1.prototype.mySpecialTable1Method= function()
    {
      console.log(this.id);
    };
    

    实施

    var t = new Table1(1, 2, 3, 4);
    t.mySpecialTable1Method();// outputs: 1
    

    如果您需要与(即将成为)对象交互的方法,那么我肯定会使用上面的代码。此外,在处理对象时,它会更清楚与特定“类型”相关(命名数据)。
    但是,如果您的对象不需要任何特殊的“处理”,那么我认为使用普通的 js 对象文字并传递它们没有任何问题(可能对小型项目有好处)。

    类似的东西:

    var table1 = {};
    table1.id = 1;
    table1.x = 2;
    table1.y = 3;
    table1.z = 4;
    console.log(table1.id); //outputs: 1
    

    额外参考:
    http://www.youtube.com/watch?v=PMfcsYzj-9M
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript

    更新:
    为了可读性和可扩展性以及您来自 C# 的观点,您可能希望坚持“类”实现,因为它将定义原始数据和您正在使用的对象之间的相关性。
    您很有可能会处理一些可能杂乱无章的数据。
    MVC 可能是您的解决方案。它试图为你所期待的混乱带来一些秩序。我建议查看其中的一些,例如:AngularJS 或 Ember。
    另一种解决方案可能是响应式 js - 但主要是如果您要根据数据与 DOM 交互(ReactJS 和 Facebook 的 React 是一些不错的)。

    作为安全说明,我想补充一点,将数据紧密映射到数据库并不是最佳做法,而是您自己的决定。

    【讨论】:

    • 我编辑我的帖子。我的意思是 function table1 不是 var table1=function (这是我将方法添加到类中的方式),但对于这些,它们只是要紧密映射到数据库的纯数据,因此类中没有函数。我想我担心如果我没有任何数据类型类,我最终会遇到一些“问题”,但也许我只需要克服它。但是在一个有 5 个页面和 15 个源文件的中型应用程序中,javascripters 如何跟踪他们的数据?他们是否在整个代码中都放置了 /* table1 */ type cmets?
    • 好吧,我猜你要转移到 MVC~ 领域 :) 我会用一些有用的提示更新答案。
    • 感谢更新,我确实了解数据库映射点。我为这个应用程序选择了 knockout.js,数据将主要通过 ajax 来回传输。现在我将把我的“结构”保留为函数格式,仅供参考,因为这样代码突出显示有助于我阅读它。但是在实际制作新对象时,我会避免使用“新”语法,看看它是如何进行的。谢谢。
    • 有趣的是,上次我读到 Javascript 与 JavaScript 的答案是 MS 称它为 JavaScript,但 Javascript 将是实际的通用名称。我更喜欢 Javascript,因为 JavaScript 使它看起来与 Java 的关系过于密切。但我猜“维基百科”所说的都是“正确的”。无论如何,感谢您的编辑。
    【解决方案2】:

    JavaScript 没有类,它是一种函数式语言,函数是 js 中的一等公民,这意味着函数是一个对象。

    从您的示例中,我可以看出您对类的意图只是传递数据,而使用 json 非常适合。

    【讨论】:

      【解决方案3】:

      Javascript 是一种有趣的语言,有很多方法可以做事。对象是 Javascript 中带有或不带有名称的对象。 {} 只是创建它的一种快捷方式。

      如果您追求可读性,那么您的初始示例将是您的最佳选择。

      如果您只想将数据块放入数组中,那么您的第二个示例是合适的。就个人而言,如果只是数据,我会使用您后面的示例。

      如果您使用函数和数据存储,并计划在代码中多次重用它,那么是的,定义您的对象并适当地调用它。

      【讨论】:

      • Funny JavaScript 很有趣,我喜欢有趣。
      • 我只是喜欢我过去以一种方式做事,这是正确且有效的。随着时间的推移,我转向了一种新的方式,地狱,它仍然是正确的并且有效。
      • 没错。有很多方法可以做事,在优化方面,让事情变得更小和更快是很有趣的。我也喜欢压缩代码的获取方式,例如,与 C++ 不同,您在使用 ||&& 操作时不需要返回布尔值。
      猜你喜欢
      • 2011-09-03
      • 2010-11-17
      • 2011-11-10
      • 1970-01-01
      • 2022-01-24
      • 2011-06-16
      • 1970-01-01
      • 2020-04-29
      • 2011-02-20
      相关资源
      最近更新 更多