![](/img/trans.png)
[英]What's the difference between <?> and <? extends Object> in Java Generics?
[英]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 對象的五種不同用例或可能的含義:
記錄是一組屬性槽,例如,
var myRecord = { firstName:"Tom", lastName:"Smith", age:26}
關聯數組(或“哈希映射”)是一組鍵值槽。 它支持值中進行查找基於像鑰匙,例如,
var numeral2number = { "one":"1", "two":"2", "three":"3"}
它將值“1”與鍵“一”、“2”與“二”等相關聯。鍵不必是有效的 JavaScript 標識符,但可以是任何類型的字符串(例如,它可能包含空格)。
無類型對象不會實例化類。 它可能有屬性槽和方法槽,例如,
var person1 = { lastName: "Smith", firstName: "Tom", getInitials: function () { return this.firstName.charAt(0) + this.lastName.charAt(0); } };
命名空間可以以由全局對象變量引用的無類型對象的形式定義,其名稱代表命名空間前綴。 例如,以下對象變量提供了基於模型-視圖-控制器 (MVC) 架構范式的應用程序的主命名空間,其中我們有三個子命名空間,對應於 MVC 應用程序的三個部分:
var myApp = { model:{}, view:{}, ctrl:{} };
實例化由 JavaScript 構造函數C
定義的類的類型化對象o
使用表達式創建
var o = new C(...)
可以使用自省表達式檢索此類類型對象的類型/類
o.constructor.name // returns "C"
有關 JavaScript 對象的更多信息,請參閱我的JavaScript Sumary 。
除上述內容外,您還可以添加以下提到的點:
Javascript 對象是可變的(我們可以添加屬性),而 Java 對象是不可變的(我們不能添加屬性,但我們可以通過 setter 來更改屬性的值)。 當我說可變時,可以向 Javascript 對象添加一些額外的屬性。 比如說。
var person = { firstName: "John", secondName: "Deer", }
稍后我們可以通過添加其他屬性來更改它。 說
Person.age = 25;
在此步驟之后 Person 將更改為
{firstName: "John", secondName: "Deer", age: 25}
在 Java 的情況下,這種向實例化對象添加屬性的方式是不可能的。
使用文字
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.