聊聊JavaScript中怎麼利用Object()函數來建立對象
怎麼利用Object()函數建立物件?以下這篇文章為大家介紹一下Object()建構函式建立物件的方法(附其他三種建立物件的方法),希望對大家有幫助!
new Object()建立物件
#JavaScript 原生提供Object物件(注意起首的O是大寫) ,所有其他物件都繼承自這個物件。 Object本身也是一個建構函數,可以直接透過它來產生新物件。
Object()函數可以將給定的值包裝為一個新物件。
語法:
new Object() new Object(value)
參數 value
# 是任意類型的可選參數。
如果
value
值是null
或undefined
或不傳時,則會建立並傳回一個空對象;如果
value
值是一個基本類型,則會建構其包裝類別的對象,傳回一個和給定的值相對應的類型的對象。 ;如果
value
值是引用類型,則仍然傳回這個值。如果給定值是一個已經存在的對象,則會傳回這個已經存在的值(相同位址)。
var obj = new Object(); //创建了一个空的对象 obj.uname = 'zhangsanfeng'; obj.name = 18; //字面量方式创建对象不同,这里需要用 = 赋值添加属性和方法 obj.sex = 'nan'; //属性和方法后面以;结束 obj.sayHi = function() { console.log('hi'); } console.log(obj.uname); console.log(obj['age']);
說明:透過new Object()
的寫法產生新對象,與字面量的寫法o = {}
是等價的。
var o1 = {a: 1}; var o2 = new Object(o1); o1 === o2 // true new Object(123) instanceof Number // true
與其他建構子一樣,如果要在Object物件上面部署一個方法,有兩種做法。
(1)部署在Object物件本身
例如,在Object物件上面定義一個print方法,顯示其他物件的內容。
Object.print = function(o){ console.log(o) }; var o = new Object(); Object.print(o) // Object
(2)部署在Object.prototype物件
所有建構子都有一個prototype屬性,指向一個原型物件。凡是定義在Object.prototype物件上面的屬性和方法,都會被所有實例物件共用。 (關於prototype屬性的詳細解釋,請參閱《物件導向程式設計》一章。)
Object.prototype.print = function(){ console.log(this)}; var o = new Object(); o.print() // Object
上面程式碼在Object.prototype定義了一個print方法,然後產生一個Object的實例o。 o直接繼承了Object.prototype的屬性和方法,可以在自身呼叫它們,也就是說,o物件的print方法實質上是呼叫Object.prototype.print方法。 。
可以看到,儘管上面兩種寫法的print方法功能相同,但是用法是不一樣的,因此必須區分「建構函數的方法」和「實例物件的方法」。
Object()
Object本身就是一個函數,本身當作工具方法使用時,可以將任意值轉為物件。這個方法常用來確保某個值一定是物件。
如果參數是原始類型的值,Object方法傳回對應的包裝物件的實例
Object() // 返回一个空对象 Object() instanceof Object // true Object(undefined) // 返回一个空对象 Object(undefined) instanceof Object // true Object(null) // 返回一个空对象 Object(null) instanceof Object // true Object(1) // 等同于 new Number(1) Object(1) instanceof Object // true Object(1) instanceof Number // true Object('foo') // 等同于 new String('foo') Object('foo') instanceof Object // true Object('foo') instanceof String // true Object(true) // 等同于 new Boolean(true) Object(true) instanceof Object // true Object(true) instanceof Boolean // true
上面程式碼表示Object函數可以將各種值轉為對應的建構函數所產生的物件。
如果Object方法的參數是一個對象,它總是會傳回原對象。
var arr = []; Object(arr) // 返回原数组 Object(arr) === arr // true var obj = {}; Object(obj) // 返回原对象 Object(obj) === obj // true var fn = function () {}; Object(fn) // 返回原函数 Object(fn) === fn // true
利用這一點,可以寫一個判斷變數是否為物件的函數。
function isObject(value) { return value === Object(value); } isObject([]) // true isObject(true) // false
擴充知識:其他創建物件的三種方法
#1. 物件字面量{ …}
物件字面量的方式是最常用的方式之一,它用內含屬性的花括號{...}
快速創建物件。
var obj1 = {}; obj1.name = "Tom"; var obj2 = { name: "Tom", age: 12 }; var name = "Tom", age = 12; var obj3 = { name: name, age: age }; // ES2015中,属性名和变量名相同时可简写为: var obj3 = { name, age }; // 扩展属性,ES2018新特性,可用于克隆或合并对象,浅拷贝,不包括原型 var obj4 = { ...obj3 };
2. Object.create()
Object.create()
方法建立一個新對象,使用現有的對象來提供新建立的對象的__proto__
。
/** * 创建一个具有指定原型的对象,并且包含指定的属性。 * @param o 新创建对象的原型对象。可能为空 * @param properties 包含一个或多个属性描述符的 JavaScript 对象。 */ create(o: object | null, properties?: PropertyDescriptorMap): any; interface PropertyDescriptorMap { [s: string]: PropertyDescriptor; } interface PropertyDescriptor { configurable?: boolean; enumerable?: boolean; value?: any; writable?: boolean; get?(): any; set?(v: any): void; }
var obj1 = Object.create(null); Object.getPrototypeOf(obj1) === null; // true var proto= {}; var obj2 = Object.create(proto); Object.getPrototypeOf(obj2) === proto; // true var obj3 = Object.create({}, { p: { value: 42 } }); // 属性描述对象中省略了的属性默认为false,所以p是不可写,不可枚举,不可配置的 Object.getOwnPropertyDescriptors(obj3); // p: {value: 42, writable: false, enumerable: false, configurable: false} //创建一个可写的,可枚举的,可配置的属性p var obj4 = Object.create({}, { p: { value: 42, writable: true, enumerable: true, configurable: true } }); //不能同时指定访问器(get和set)和 值或可写属性 var obj4 = Object.create({}, { p: { // value: 42, // 不能和get set同时存在 // writable: true, // 不能和get set同时存在 enumerable: true, configurable: true, get: function() { return 10 }, set: function(value) { console.log("Setting `p` to", value); } } });
3. Object.assign()
Object.assign()
方法並不是直接用來創建物件的,但它可以達到創建物件的效果,所以這裡把它也當作一種創建物件的方式。
Object.assign()
方法用於將所有自身的可列舉屬性的值從一個或多個來源物件複製到目標對象。返回目標物件。
Object.assign(target, …sources)
- 如果目標物件或來源物件中具有相同的屬性,後面的物件的屬性將覆寫前面的物件的屬性。
- 只會拷貝來源物件本身的可列舉屬性到目標物件。對來源物件原型上的物件不做處理。
- 此方法使用來源物件的
Get
和目標物件的Set
來取得和設定值。
var o1 = { name: "Tom" }; var o2 = { name: "Jerry" }; var o3 = Object.create(o2, { // o2是o3的原型,name: "Jerry"是原型上的属性 a: { value: 42 }, // 不可枚举 b: { value: 42, writable: false, enumerable: true, configurable: false }, c: { enumerable: true, get: function() { return 10; } } }); var obj1 = Object.assign(o1, o2); obj1 === o1; // true obj1; // {name: "Tom", b: 42, c: 10} Object.getOwnPropertyDescriptors(obj1); // 不会拷贝属性的 /* b: {value: 42, writable: true, enumerable: true, configurable: true} c: {value: 10, writable: true, enumerable: true, configurable: true} name: {value: "Tom", writable: true, enumerable: true, configurable: true} */ var o4 = { a: "a", b: { name: "Tom", age: 18 } }; var obj2 = Object.assign({}, o4); obj2.b === o4.b; // true, 浅拷贝,如果源值是一个对象的引用,它仅仅会复制其引用值。 // 合并对象,后面属性覆盖前面属性 var o1 = { a: 1, b: 1 }; var o2 = { b: 2, c: 2 }; var o3 = { a: 3 }; var obj3 = Object.assign({}, o1, o2, o3); obj3; // {a: 3, b: 2, c: 2} // 基本类型会被转为包装对象,只有字符串的包装对象有自身可枚举属性。 var obj4 = Object.assign({}, "abc", null, true, undefined, 10, Symbol("foo")); obj4; // {0: "a", 1: "b", 2: "c"} // 拷贝过程中发生异常,会终止后续拷贝任务,已拷贝的数据保留 var t = Object.create( {}, { b: { value: 42, writable: false } }); // b是只读属性 Object.assign(t, {a: 1}, {a: 2, b: 2, c: 3}, {c: 4}); // Cannot assign to read only property 'b' of object '#<Object>' t; // {a: 2, b: 42}
【相關推薦:javascript學習教學】
以上是聊聊JavaScript中怎麼利用Object()函數來建立對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務
