【译】如何在 JavaScript 中使用对象的方法

栏目: JavaScript · 发布时间: 5年前

内容简介:原文:作者:Tania Rascia译者:博轩

原文: How To Use Object Methods in JavaScript

作者:Tania Rascia

译者:博轩

介绍

JavaScript 中, 对象键/值 对的集合。 可以包含 属性方法 ,并且可以包含所有其他 JavaScript 数据类型,例如字符串,数字和布尔值。

JavaScript中的所有对象都来自父 Object 的构造函数。 Object 为我们提供了很多实用的内置方法,并且可以在单个对象中直接使用。不同于 数组的原型方法 例如 sort()reverse() 只能被数组实例使用,对象方法直接来自 Object 构造函数,并使用对象实例作为参数。这称为静态方法。

本教程将介绍重要的内置对象方法,下面的每个部分都涉及特定方法并提供使用示例。

前提

为了充分利用本教程,您应该熟悉创建,修改和使用对象,您可以在 “ 了解JavaScript中的对象 ” 一文中查看这些对象。

有关JavaScript的其他指导,您可以查看 “ JavaScript 如何编码 ” 系列。

Object.create()

Object.create() 方法用于创建一个新对象,并将其链接到现有的对象原型。

我们可以创建一个 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() 会创建一个包含对象键的数组。

我们可以创建一个对象并打印键的数组。

// 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 循环和 Object.keys() 返回的可枚举属性有一个区别:

for-in 循环同时也会遍历原型属性

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() 创建一个包含对象值的数组。

// 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() 创建对象的 键/值 对的嵌套数组。

// 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() 方法循环并处理结果。

// 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() 用于把一个对象的值复制到另一个对象。

我们可以创建两个对象,使用 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__ 属性访问。

在这个例子中,我们可以创建一个可以访问 Array 原型的数组。

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

Object.getPrototypeOf(employees);
Output

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

我们可以在该原型输出中看到 employees 数组访问 popfind 以及其他数组原型方法。我们可以通过测试 employees 原型来证实这一点 Array.prototype

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

true

此方法可用于获取有关对象的更多信息或确保它可以访问另一个对象的原型。

还有一种相关 Object.setPrototypeOf() 方法将一个原型添加到另一个对象。建议您使用 Object.create() , 因为它更快,性能更高。

结论

对象有许多有用的方法可以帮助我们修改,保护和迭代它们。在本教程中,我们回顾了如何创建和分配新对象,迭代对象的键和/或值,以及冻结或密封对象。

如果您需要查看JavaScript对象,可以阅读 “了解 JavaScript中的对象” 。如果您想熟悉原型链,可以查看 “ 了解JavaScript中的原型和继承”


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

构建之法(第三版)

构建之法(第三版)

邹欣 / 人民邮电出版社 / 2017-6 / 69.00元

软件工程牵涉的范围很广, 同时也是一般院校的同学反映比较空洞乏味的课程。 但是,软件工程 的技术对于投身 IT 产业的学生来说是非常重要的。作者有在世界一流软件企业 20 年的一线软件开 发经验,他在数所高校进行了多年的软件工程教学实践,总结出了在 16 周的时间内让同学们通过 “做 中学 (Learning By Doing)” 掌握实用的软件工程技术的教学计划,并得到高校师生的积极反馈。在此 ......一起来看看 《构建之法(第三版)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具