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

时间:2014-02-24 22:13:19

标签: java javascript oop uml

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

2 个答案:

答案 0 :(得分:9)

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

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

  1. 记录 是一组属性广告位,例如,

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

    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. 命名空间 可以以全局对象变量引用的无类型对象的形式定义,其名称表示名称空间前缀。例如,以下对象变量提供了基于Model-View-Controller(MVC)体系结构范例的应用程序的主命名空间,其中我们有三个子命名空间,对应于MVC应用程序的三个部分:

    var myApp = { model:{}, view:{}, ctrl:{} };
    
  5. 使用表达式o定义的类的 类型对象 C />

    var o = new C(...)
    

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

    o.constructor.name  // returns "C"
    
  6. 有关JavaScript对象的更多信息,请参阅我的JavaScript Sumary

答案 1 :(得分:0)

除此之外,您还可以添加以下提到的要点:

  1. JavaScript对象是可变的(我们可以添加属性),而Java对象是不可变的(我们不能添加属性,但可以通过setter更改属性的值)。当我说可变时,可以向Javascript对象添加一些其他属性。例如。

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

稍后,我们可以通过添加其他属性来对其进行更改。说

Person.age = 25;

此步骤之后,“人员”将更改为

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

在Java中,无法通过这种方法向实例化对象添加属性。

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

使用文字

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

使用Javascript新对象

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");