簡體   English   中英

JavaScript 對象和 OO/UML/Java 對象有什么區別?

[英]What's the difference between a JavaScript object and an OO/UML/Java object?

在 UML 定義並實例化的標准 OO 中,例如由 Java 和 C# 實例化,存在將對象作為類實例的特定概念。 這個經典的對象概念和 JavaScript 對象有什么區別?

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”與鍵“一”、“2”與“二”等相關聯。鍵不必是有效的 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. 實例化由 JavaScript 構造函數C定義的類的類型化對象o使用表達式創建

    var o = new C(...)

    可以使用自省表達式檢索此類類型對象的類型/類

    o.constructor.name // returns "C"

有關 JavaScript 對象的更多信息,請參閱我的JavaScript Sumary

除上述內容外,您還可以添加以下提到的點:

  1. Javascript 對象是可變的(我們可以添加屬性),而 Java 對象是不可變的(我們不能添加屬性,但我們可以通過 setter 來更改屬性的值)。 當我說可變時,可以向 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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM