成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【譯】如何在 JavaScript 中使用對象的方法

longmon / 2288人閱讀

摘要:中的所有對象都來自父的構造函數。不同于數組的原型方法例如和只能被數組實例使用,對象方法直接來自構造函數,并使用對象實例作為參數。這稱為靜態(tài)方法。創(chuàng)建對象的鍵值對的嵌套數組。可用于確定對象是否已凍結,并返回布爾值。

原文:How To Use Object Methods in JavaScript
作者:Tania Rascia
譯者:博軒
介紹

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

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

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

前提

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

有關JavaScript的其他指導,您可以查看“ JavaScript 如何編碼 ”系列。

Object.create()

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

我們可以創(chuàng)建一個job對象實例,并將其擴展為更具體的對象。

// Initialize an object with properties and methods
const job = {
    position: "cashier",
    type: "hourly",
    isAvailable: true,
    showDetails() {
        const accepting = this.isAvailable ? "is accepting applications" : "is not currently accepting applications";

        console.log(`The ${this.position} position is ${this.type} and ${accepting}.`);
    }
};

// Use Object.create to pass properties
const barista = Object.create(job);

barista.position = "barista";
barista.showDetails();
Output

The barista position is hourly and is accepting applications.

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

Object.keys()

Object.keys() 會創(chuàng)建一個包含對象鍵的數組。

我們可以創(chuàng)建一個對象并打印鍵的數組。

// Initialize an object
const employees = {
    boss: "Michael",
    secretary: "Pam",
    sales: "Jim",
    accountant: "Oscar"
};

// Get the keys of the object
const keys = Object.keys(employees);

console.log(keys);
Output

["boss", "secretary", "sales", "accountant"]

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

// Iterate through the keys
Object.keys(employees).forEach(key => {
    let value = employees[key];

     console.log(`${key}: ${value}`);
});
Output

boss: Michael
secretary: Pam
sales: Jim
accountant: Oscar
for-in 循環(huán)和Object.keys()返回的可枚舉屬性有一個區(qū)別:
for-in 循環(huán)同時也會遍歷原型屬性
Object.keys() 只會返回自有(實例)屬性

Object.keys() 對于檢查對象的長度也很有用。

// Get the length of the keys
const length = Object.keys(employees).length;

console.log(length);
Output

4

使用該 length 屬性,我們能夠計算employees包含4個自有屬性。

Object.values()

Object.values() 創(chuàng)建一個包含對象值的數組。

// Initialize an object
const session = {
    id: 1,
    time: `26-July-2018`,
    device: "mobile",
    browser: "Chrome"
};

// Get all values of the object
const values = Object.values(session);

console.log(values);
Output

[1, "26-July-2018", "mobile", "Chrome"]

Object.keys()Object.values()允許您從對象返回數據。

Object.entries()

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

// Initialize an object
const operatingSystem = {
    name: "Ubuntu",
    version: 18.04,
    license: "Open Source"
};

// Get the object key/value pairs
const entries = Object.entries(operatingSystem);

console.log(entries);
Output

[
    ["name", "Ubuntu"]
    ["version", 18.04]
    ["license", "Open Source"]
]

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

// Loop through the results
entries.forEach(entry => {
    const [key, value] = entry;

    console.log(`${key}: ${value}`);
});
Output

name: Ubuntu
version: 18.04
license: Open Source

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

Object.assign()

Object.assign() 用于把一個對象的值復制到另一個對象。

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

// Initialize an object
const name = {
    firstName: "Philip",
    lastName: "Fry"
};

// Initialize another object
const details = {
    job: "Delivery Boy",
    employer: "Planet Express"
};

// Merge the objects
const character = Object.assign(name, details);

console.log(character);
Output

{firstName: "Philip", lastName: "Fry", job: "Delivery Boy", employer: "Planet Express"}

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

// Initialize an object
const name = {
    firstName: "Philip",
    lastName: "Fry"
};

// Initialize another object
const details = {
    job: "Delivery Boy",
    employer: "Planet Express"
};

// Merge the object with the spread operator
const character = {...name, ...details}

console.log(character);
Output

{firstName: "Philip", lastName: "Fry", job: "Delivery Boy", employer: "Planet Express"}

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

Object.freeze()

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

// Initialize an object
const user = {
    username: "AzureDiamond",
    password: "hunter2"
};

// Freeze the object
const newUser = Object.freeze(user);

newUser.password = "*******";
newUser.active = true;

console.log(newUser);
Output

{username: "AzureDiamond", password: "hunter2"}

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

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

Object.seal()

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

// Initialize an object
const user = {
    username: "AzureDiamond",
    password: "hunter2"
};

// Seal the object
const newUser = Object.seal(user);

newUser.password = "*******";
newUser.active = true;

console.log(newUser);
Output

{username: "AzureDiamond", password: "*******"}

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

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

Object.getPrototypeOf()

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

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

const employees = ["Ron", "April", "Andy", "Leslie"];

Object.getPrototypeOf(employees);
Output

[constructor: ?, concat: ?, find: ?, findIndex: ?, pop: ?, …]

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

Object.getPrototypeOf(employees) === Array.prototype;
Output

true

此方法可用于獲取有關對象的更多信息或確保它可以訪問另一個對象的原型。

還有一種相關Object.setPrototypeOf()方法將一個原型添加到另一個對象。建議您使用Object.create(), 因為它更快,性能更高。

結論

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/103735.html

相關文章

  • javascriptthis關鍵詞理解

    摘要:在中,當使用關鍵字調用函數構造函數時,函數構造函數中也有這個概念,但是它不是惟一的規(guī)則,而且常??梢砸脕碜圆煌瑘?zhí)行上下文的不同對象。因此,我們使用調用函數,可以看到這是對象,并且的屬性是正常的。 一直以來,javascript里邊的this都是一個很難理解的東西,之前看的最多的就是阮一峰老師關于this的理解: http://www.ruanyifeng.com/blo... htt...

    tainzhi 評論0 收藏0
  • 】【Javascript - 真正原型繼承】

    摘要:操作符構造步驟有三步構造一個類的實例這個實例是一個空對象,并且他的屬性指向構造函數的原型。不優(yōu)化原生的或自定義的作為構造函數是及其不高效的。 原文地址:Javascript – How Prototypal Inheritance really works 在網上可以看到各種關于Javascript原型繼承的文章,但Javascript規(guī)范中只提供了new操作符這一種實現原型繼承的方法...

    zoomdong 評論0 收藏0
  • 失業(yè)《課多周刊》(第3期)

    摘要:正在失業(yè)中的課多周刊第期我們的微信公眾號,更多精彩內容皆在微信公眾號,歡迎關注。若有幫助,請把課多周刊推薦給你的朋友,你的支持是我們最大的動力。是一種禍害譯本文淺談了在中關于的不好之處。淺談超時一運維的排查方式。 正在失業(yè)中的《課多周刊》(第3期) 我們的微信公眾號:fed-talk,更多精彩內容皆在微信公眾號,歡迎關注。 若有幫助,請把 課多周刊 推薦給你的朋友,你的支持是我們最大的...

    robin 評論0 收藏0
  • 失業(yè)《課多周刊》(第3期)

    摘要:正在失業(yè)中的課多周刊第期我們的微信公眾號,更多精彩內容皆在微信公眾號,歡迎關注。若有幫助,請把課多周刊推薦給你的朋友,你的支持是我們最大的動力。是一種禍害譯本文淺談了在中關于的不好之處。淺談超時一運維的排查方式。 正在失業(yè)中的《課多周刊》(第3期) 我們的微信公眾號:fed-talk,更多精彩內容皆在微信公眾號,歡迎關注。 若有幫助,請把 課多周刊 推薦給你的朋友,你的支持是我們最大的...

    Joyven 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<