自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在JavaScript中使用對(duì)象的方法

開發(fā) 前端
JavaScript 中,對(duì)象是 鍵/值 對(duì)的集合。值可以包含屬性和方法,并且可以包含所有其他 JavaScript 數(shù)據(jù)類型,例如字符串,數(shù)字和布爾值。本教程將介紹重要的內(nèi)置對(duì)象方法,下面的每個(gè)部分都涉及特定方法并提供使用示例。

 [[263331]]

介紹

JavaScript 中,對(duì)象是 鍵/值 對(duì)的集合。值可以包含屬性和方法,并且可以包含所有其他 JavaScript 數(shù)據(jù)類型,例如字符串,數(shù)字和布爾值。

JavaScript中的所有對(duì)象都來自父 Object 的構(gòu)造函數(shù)。Object 為我們提供了很多實(shí)用的內(nèi)置方法,并且可以在單個(gè)對(duì)象中直接使用。不同于 數(shù)組的原型方法 例如 sort() 和 reverse() 只能被數(shù)組實(shí)例使用,對(duì)象方法直接來自 Object 構(gòu)造函數(shù),并使用對(duì)象實(shí)例作為參數(shù)。這稱為靜態(tài)方法。

本教程將介紹重要的內(nèi)置對(duì)象方法,下面的每個(gè)部分都涉及特定方法并提供使用示例。

前提

為了充分利用本教程,您應(yīng)該熟悉創(chuàng)建,修改和使用對(duì)象,您可以在“ 了解JavaScript中的對(duì)象 ”一文中查看這些對(duì)象。

有關(guān)JavaScript的其他指導(dǎo),您可以查看“ JavaScript 如何編碼 ”系列。

Object.create()

Object.create() 方法用于創(chuàng)建一個(gè)新對(duì)象,并將其鏈接到現(xiàn)有的對(duì)象原型。

我們可以創(chuàng)建一個(gè)job對(duì)象實(shí)例,并將其擴(kuò)展為更具體的對(duì)象。 

  1. // Initialize an object with properties and methods  
  2. const job = {  
  3. position: 'cashier',  
  4. type: 'hourly',  
  5. isAvailable: true,  
  6. showDetails() {  
  7. const accepting = this.isAvailable ? 'is accepting applications' : "is not currently accepting applications";  
  8. console.log(`The ${this.position} position is ${this.type} and ${accepting}.`);  
  9.  
  10. };  
  11. // Use Object.create to pass properties  
  12. const barista = Object.create(job);  
  13. barista.position = "barista" 
  14. barista.showDetails();  
  1. Output  
  2. The barista position is hourly and is accepting applications.  

barista 對(duì)象現(xiàn)在有一個(gè) position 屬性 - 但是所有其他屬性和方法都可以通過 job 的原型獲得。通過Object.create()來實(shí)現(xiàn)最小化重復(fù),對(duì)于保持代碼DRY十分有效。

Object.keys()

Object.keys() 會(huì)創(chuàng)建一個(gè)包含對(duì)象鍵的數(shù)組。

我們可以創(chuàng)建一個(gè)對(duì)象并打印鍵的數(shù)組。 

  1. // Initialize an object  
  2. const employees = {  
  3. boss: 'Michael',  
  4. secretary: 'Pam',  
  5. sales: 'Jim',  
  6. accountant: 'Oscar'  
  7. };  
  8. // Get the keys of the object  
  9. const keys = Object.keys(employees);  
  10. console.log(keys);  
  1. Output  
  2. ["boss", "secretary", "sales", "accountant"]  

Object.keys() 還可用于迭代對(duì)象的鍵和值。 

  1. // Iterate through the keys  
  2. Object.keys(employees).forEach(key => {  
  3. let value = employees[key];  
  4. console.log(`${key}: ${value}`);  
  5. });  
  1. Output  
  2. boss: Michael  
  3. secretary: Pam  
  4. sales: Jim  
  5. accountant: Oscar  

for-in 循環(huán)和Object.keys()返回的可枚舉屬性有一個(gè)區(qū)別:

for-in 循環(huán)同時(shí)也會(huì)遍歷原型屬性

Object.keys() 只會(huì)返回自有(實(shí)例)屬性

Object.keys() 對(duì)于檢查對(duì)象的長(zhǎng)度也很有用。 

  1. // Get the length of the keys  
  2. const length = Object.keys(employees).length;  
  3. console.log(length);  
  1. Output  
  2.  

使用該 length 屬性,我們能夠計(jì)算employees包含4個(gè)自有屬性。

Object.values()

Object.values() 創(chuàng)建一個(gè)包含對(duì)象值的數(shù)組。 

  1. // Initialize an object  
  2. const session = {  
  3. id: 1,  
  4. time: `26-July-2018`,  
  5. device: 'mobile',  
  6. browser: 'Chrome'  
  7. };  
  8. // Get all values of the object  
  9. const values = Object.values(session);  
  10. console.log(values);  
  1. Output  
  2. [1, "26-July-2018", "mobile", "Chrome"]  

Object.keys()和Object.values()允許您從對(duì)象返回?cái)?shù)據(jù)。

Object.entries()

Object.entries() 創(chuàng)建對(duì)象的鍵/值對(duì)的嵌套數(shù)組。 

  1. // Initialize an object  
  2. const operatingSystem = {  
  3. name: 'Ubuntu',  
  4. version: 18.04,  
  5. license: 'Open Source'  
  6. };  
  7. // Get the object key/value pairs  
  8. const entries = Object.entries(operatingSystem);  
  9. console.log(entries);  
  1. Output  
  2.  
  3. ["name", "Ubuntu"]  
  4. ["version", 18.04]  
  5. ["license", "Open Source"]  
  6.  

一旦我們有了鍵/值對(duì)數(shù)組,我們就可以使用該forEach()方法循環(huán)并處理結(jié)果。 

  1. // Loop through the results  
  2. entries.forEach(entry => {  
  3. const [key, value] = entry;  
  4. console.log(`${key}: ${value}`);  
  5. });  
  1. Output  
  2. name: Ubuntu  
  3. version: 18.04  
  4. license: Open Source  

Object.entries() 方法僅返回對(duì)象實(shí)例自己的屬性,而不返回可通過其原型繼承的任何屬性。

Object.assign()

Object.assign() 用于把一個(gè)對(duì)象的值復(fù)制到另一個(gè)對(duì)象。

我們可以創(chuàng)建兩個(gè)對(duì)象,使用Object.assign()方法將它們合并。 

  1. // Initialize an object  
  2. const name = {  
  3. firstName: 'Philip',  
  4. lastName: 'Fry'  
  5. };  
  6. // Initialize another object  
  7. const details = {  
  8. job: 'Delivery Boy',  
  9. employer: 'Planet Express'  
  10. };  
  11. // Merge the objects  
  12. const character = Object.assign(name, details);  
  13. console.log(character);  
  1. Output  
  2. {firstName: "Philip", lastName: "Fry", job: "Delivery Boy", employer: "Planet Express"}  

也可以使用展開語法(Spread syntax)來完成相同的任務(wù)。在下面的代碼中,我們將通過展開語法合并name和details對(duì)象,來聲明character對(duì)象。 

  1. // Initialize an object  
  2. const name = {  
  3. firstName: 'Philip',  
  4. lastName: 'Fry'  
  5. };  
  6. // Initialize another object  
  7. const details = {  
  8. job: 'Delivery Boy',  
  9. employer: 'Planet Express'  
  10. };  
  11. // Merge the object with the spread operator  
  12. const character = {...name, ...details}  
  13. console.log(character);  
  1. Output  
  2. {firstName: "Philip", lastName: "Fry", job: "Delivery Boy", employer: "Planet Express"} 

展開語法(Spread syntax) 在對(duì)象語法中也成為淺層克隆(shallow-cloning)。

Object.freeze()

Object.freeze() 防止修改對(duì)象的屬性和值,并防止在對(duì)象中添加或刪除屬性。 

  1. // Initialize an object  
  2. const user = {  
  3. username: 'AzureDiamond',  
  4. password: 'hunter2'  
  5. };  
  6. // Freeze the object  
  7. const newUser = Object.freeze(user);  
  8. newUser.password = '*******' 
  9. newUser.active = true 
  10. console.log(newUser);  
  1. Output  
  2. {username: "AzureDiamond", password: "hunter2"}  

在上面的例子中,我們?cè)噲D重寫密碼用*******覆蓋hunter2,但password的值能保持不變。我們還嘗試添加一個(gè)新屬性active,但沒有添加。

Object.isFrozen() 可用于確定對(duì)象是否已凍結(jié),并返回布爾值。

Object.seal()

Object.seal()阻止將新屬性添加到對(duì)象,但允許修改現(xiàn)有屬性。這種方法類似于Object.freeze()。在實(shí)現(xiàn)下面的代碼之前刷新控制臺(tái)以避免錯(cuò)誤。 

  1. // Initialize an object  
  2. const user = {  
  3. username: 'AzureDiamond',  
  4. password: 'hunter2'  
  5. };  
  6. // Seal the object  
  7. const newUser = Object.seal(user);  
  8. newUser.password = '*******' 
  9. newUser.active = true 
  10. console.log(newUser);  
  1. Output  
  2. {username: "AzureDiamond", password: "*******"}  

新active屬性未添加到密封對(duì)象,但password屬性已成功更改。

Object.isSealed() 可用于確定對(duì)象是否已封閉,并返回布爾值。

Object.getPrototypeOf()

Object.getPrototypeOf()用于獲取[[Prototype]]對(duì)象的內(nèi)部隱藏,也可通過 __proto__ 屬性訪問。

在這個(gè)例子中,我們可以創(chuàng)建一個(gè)可以訪問Array原型的數(shù)組。 

  1. const employees = ['Ron', 'April', 'Andy', 'Leslie'];  
  2. Object.getPrototypeOf(employees);  
  1. Output  
  2. [constructor: ƒ, concat: ƒ, find: ƒ, findIndex: ƒ, pop: ƒ, …]  

我們可以在該原型輸出中看到employees數(shù)組訪問pop,find以及其他數(shù)組原型方法。我們可以通過測(cè)試employees原型來證實(shí)這一點(diǎn)Array.prototype。 

  1. Object.getPrototypeOf(employees) === Array.prototype;  
  1. Output  
  2. true  

此方法可用于獲取有關(guān)對(duì)象的更多信息或確保它可以訪問另一個(gè)對(duì)象的原型。

還有一種相關(guān)Object.setPrototypeOf()方法將一個(gè)原型添加到另一個(gè)對(duì)象。建議您使用Object.create(), 因?yàn)樗欤阅芨摺?/p>

結(jié)論

對(duì)象有許多有用的方法可以幫助我們修改,保護(hù)和迭代它們。在本教程中,我們回顧了如何創(chuàng)建和分配新對(duì)象,迭代對(duì)象的鍵和/或值,以及凍結(jié)或密封對(duì)象。

如果您需要查看JavaScript對(duì)象,可以閱讀“了解 JavaScript中的對(duì)象” 。如果您想熟悉原型鏈,可以查看“ 了解JavaScript中的原型和繼承”。

責(zé)任編輯:龐桂玉 來源: senmentfault
相關(guān)推薦

2023-01-28 17:41:07

Java代碼

2023-03-05 19:28:11

JavaScripCSS

2025-01-20 08:40:00

Python對(duì)象

2021-01-28 05:14:40

C#接口簽名

2019-09-16 19:00:48

Linux變量

2014-07-02 09:47:06

SwiftCocoaPods

2020-04-09 10:18:51

Bash循環(huán)Linux

2024-09-06 11:34:15

RustAI語言

2020-11-30 11:55:07

Docker命令Linux

2022-10-13 00:03:00

JavaScripSQL函數(shù)

2023-04-06 11:10:31

閉包JavaScript

2015-08-31 13:42:06

IDEDockerdoclipser

2018-05-16 10:32:06

Linux命令find

2018-06-26 09:15:24

Linux命令history

2022-11-18 10:16:26

Linuxwc 命令

2020-12-31 07:31:10

C# 反射數(shù)據(jù)

2022-05-10 09:12:16

TypeScript裝飾器

2023-11-02 11:15:01

容器Kubernetes

2023-01-05 17:13:28

TypeScript泛型組件

2023-04-28 17:53:09

Kubernetes沙盒Signadot
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)