java - JavaScript 对象和 OO/UML/Java 对象有什么区别?

标签 java javascript oop uml

在标准的 OO 中,由 UML 定义并实例化,例如由 Java 和 C# 实例化,存在将对象作为类实例的特定概念。这种经典的对象概念与 JavaScript 对象有什么区别?

最佳答案

JavaScript 对象不同于经典的 OO/UML(C++/Java/C# 等)对象。特别是,它们不需要实例化一个类。并且它们可以以方法槽的形式拥有自己的(实例级)方法,因此它们不仅有(普通的)属性槽,还有 方法插槽。此外,它们还可能有键值槽。因此,它们可能具有三种不同类型的槽,而经典对象(在 UML 中称为“实例规范”)仅具有属性槽。

JavaScript 对象可以以多种不同的方式用于不同的目的。以下是 JavaScript 对象的五个不同用例或可能的含义:

  1. 记录 是一组属性槽,例如,

    var myRecord = { firstName:"Tom", lastName:"Smith", age:26}
    
  2. 关联数组(或“ HashMap ”)是一组键值槽。它支持基于 查找,例如,

    var numeral2number = { "one":"1", "two":"2", "three":"3"}
    

    它将值“1”与键“one”、“2”与“two”等相关联。键不必是有效的 JavaScript 标识符,但可以是任何类型的字符串(例如,它可以包含空白空格)。

  3. 未类型化对象 不会实例化类。它可能有属性槽和方法槽,例如,

    var person1 = {  
      lastName: "Smith",  
      firstName: "Tom",
      getInitials: function () {
        return this.firstName.charAt(0) + this.lastName.charAt(0); 
      }  
    };
    
  4. 命名空间 可以定义为全局对象变量引用的无类型对象的形式,其名称代表命名空间前缀。例如,以下对象变量提供了基于模型- View - Controller (MVC) 架构范例的应用程序的主命名空间,其中我们有对应于 MVC 应用程序的三个部分的三个子命名空间:

    var myApp = { model:{}, view:{}, ctrl:{} };
    
  5. 类型化对象 o 实例化由 JavaScript 构造函数 C 定义的类是用表达式创建

    var o = new C(...)
    

    可以使用内省(introspection)表达式检索此类类型化对象的类型/类

    o.constructor.name  // returns "C"
    

查看我的 JavaScript Sumary有关 JavaScript 对象的更多信息。

关于java - JavaScript 对象和 OO/UML/Java 对象有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22000241/

相关文章:

java - 如何将脚本文件包含在jar中

java - Swing 线程问题?

java - JAX-RS,Map<String,String> 到 JSON 没有开销?

javascript - 计算模型总和

java - 使用 TYPE 通过 Inheritance.table_per_class 策略仅选择特定类

javascript - 如何在vueJs中不点击按钮的情况下在新标签页中打开页面

javascript - MongoDB 数组与 AngularJS

javascript - 'var' vs 'this' vs 构造函数参数变量

php - __autoload 的最佳解决方案

c# - 从父类(super class) C# 返回子类的 "this"