【问题标题】:What's the difference between a JavaScript object and an OO/UML/Java object?JavaScript 对象和 OO/UML/Java 对象有什么区别?
【发布时间】:2014-02-24 22:13:19
【问题描述】:

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

【问题讨论】:

    标签: java javascript oop uml


    【解决方案1】:

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

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

    1. record 是一组属性槽,例如,

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

      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. 命名空间可以定义为由全局对象变量引用的无类型对象的形式,其名称代表命名空间前缀。例如,以下对象变量提供了基于模型-视图-控制器 (MVC) 架构范例的应用程序的主命名空间,其中我们有对应于 MVC 应用程序的三个部分的三个子命名空间:

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

      var o = new C(...)
      

      这种类型化对象的类型/类可以用内省表达式检索

      o.constructor.name  // returns "C"
      

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

    【讨论】:

      【解决方案2】:

      除了以上内容,您还可以添加以下几点:

      1. Javascript 对象是可变的(我们可以添加属性),而 Java 对象是不可变的(我们不能添加属性,但我们可以通过设置器更改属性的值)。当我说可变的时候,可以向 Javascript 对象添加一些额外的属性。举个例子吧。

        var person = { firstName: "John", secondName: "Deer", }

      稍后我们可以通过添加其他属性来更改它。说

      Person.age = 25;
      

      这一步之后Person会变成

      {firstName: "John", secondName: "Deer", age: 25}

      在 Java 的情况下,这种向实例化对象添加属性的方式是不可能的。

      1. Javascript 对象可以通过多种方式实例化

      使用文字

      var person = {firstName:"Deen",lastName:"Deer"}
      

      使用 Javascripts 新建对象

      var person = new Object();
      person.firstName = "John";
      erson.lastName = "Deer";
      

      使用函数

      function Person(firstName, lastName){
      this.firstName = firstName;
      this.lastName = lastName;
      }
      

      你可以创建人对象为

      var person = new Person("John","Deer");
      

      【讨论】:

        猜你喜欢
        • 2011-09-23
        • 2020-02-06
        • 2013-06-26
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        • 2011-04-27
        相关资源
        最近更新 更多