JavaScript对象和OO/UML/Java对象之间有什么区别?

Ger*_*ner 4 javascript java oop uml

在标准OO中,由UML定义,并由Java实例化,有一定的对象概念.这个经典的对象概念和JavaScript对象有什么区别?

Ger*_*ner 10

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

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

  1. 一个记录是一组特性槽中喜欢的,例如,

    var myRecord = { firstName:"Tom", lastName:"Smith", age:26}
    
    Run Code Online (Sandbox Code Playgroud)
  2. 一个关联数组(或"散列映射")是一组键-值槽.它支持基于查找,例如,

    var numeral2number = { "one":"1", "two":"2", "three":"3"}
    
    Run Code Online (Sandbox Code Playgroud)

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

  3. 一个非类型化的对象不实例化一个类.它可能有属性槽和方法槽,例如,

    var person1 = {  
      lastName: "Smith",  
      firstName: "Tom",
      getInitials: function () {
        return this.firstName.charAt(0) + this.lastName.charAt(0); 
      }  
    };
    
    Run Code Online (Sandbox Code Playgroud)
  4. 命名空间可以在由全局对象变量引用无类型对象的形式被定义,它的名称表示一个命名空间前缀.例如,以下对象变量提供了基于Model-View-Controller(MVC)体系结构范例的应用程序的主命名空间,其中我们有三个子命名空间对应于MVC应用程序的三个部分:

    var myApp = { model:{}, view:{}, ctrl:{} };
    
    Run Code Online (Sandbox Code Playgroud)
  5. 类型的对象 o实例化由JavaScript构造函数定义的类C与表达式创建

    var o = new C(...)
    
    Run Code Online (Sandbox Code Playgroud)

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

    o.constructor.name  // returns "C"
    
    Run Code Online (Sandbox Code Playgroud)

有关JavaScript对象的更多信息,请参阅我的JavaScript Sumary.