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

更新日期: 2019-04-23 阅读: 2.7k 标签: 对象

介绍

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)来完成相同的任务。在下面的代码中,我们将通过展开语法合并name和details对象,来声明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数组访问pop,find以及其他数组原型方法。我们可以通过测试employees原型来证实这一点Array.prototype。

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

true

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

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


结论

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


原文:How To Use Object Methods in JavaScript
作者:Tania Rascia
译者:博轩 


 

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/2997

相关推荐

js获取object对象的长度

我们都知道必须是具体数据类型才有长度,所以size和length都无法测量object对象的长度,那么如何计算对象的长度,即获取对象属性的个数呢?

JavaScript数组、对象合并的多种方法实现

这篇文章讲解Js数组和对象的一些使用技巧,如何将不同的数组,对象合并/结合为1个的方法

js中关于for...in遍历对象属性的顺序问题

对象使用obj.length时,它得到的值是undefined的,所以只能通过for...in循环获取对象的属性,我们发现并没有按属性的顺序显示,而且顺序在各个浏览器下显示也不同。 这是为什么呢?

JavaScript 判断对象中是否有某属性

判断对象中是否有某属性的常见方式总结,不同的场景要使用不同的方式。一点( . )或者方括号( [ ] )、二in 运算符、三hasOwnProperty()。三种方式各有优缺点,不同的场景使用不同的方式,有时还需要结合使用

JS 的 Document对象

Document 对象是是window对象的一个属性,因此可以将document对象作为一个全局对象来访问。当浏览器载入 HTML 文档, 它就会成为 Document 对象。Document对象的 属性和方法

Js通过.或者[]访问对象属性的语法、性能等区别

在JavaScript中可以使用 . 或者 [ ] 来访问对象的属性,但是对象中方法只能通过 . 来获取;使用.运算符来存取对象的属性的值。或者使用[]作为一个关联数组来存取对象的属性。但是这两种方式有什么区别了?

history对象详解及单页面路由实现

history对象保存着用户的上网记录,从浏览器窗口打开的那一刻算起。出于安全的考虑,开发人员无法得知用户浏览过的URL。不过,借由用户访问过的页面列表,同样可以在不知道实际URL的情况下实现后退与前进

js对象 对属性调用.和[] 两种方式的区别

在 JS 对象中,调用属性一般有两种方法——点和中括号的方法。 标准格式是对象.属性(不带双引号),注意一点的是:js对象的属性,key标准是不用加引号的,加也可以,特别的情况必须加,如果key数字啊,表达式啊等等

javascript中document是什么?

javascript中document是window对象的属性,表示对Document对象的只读引用。Document对象是Window对象的一部分,可通过window.document属性对其进行访问。

Js中Blob是什么?

MDN给出的解释:Blob 对象表示一个不可变、原始数据的类文件对象;创建一个blob只有两种方式1、通过new Blob();使用blob.slice切割,创建一个新的blob对象;读取blob唯一方式,使用fileReader

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!