测测你对JavaScript对象继承和Object.entries的理解

程序员咋不秃头 2024-09-03 01:00:10

今天的挑战题目涉及到JavaScript中的原型链 (prototype chain) 和 Object.entries() 方法的使用。我们将通过一个对象继承的例子来探索如何使用 Object.entries() 获取对象的自身可枚举属性,并进行处理。让我们一起分析这段代码,看看它会输出什么以及为什么。

代码解析

首先,代码定义了两个对象 obj1 和 obj2,并设置了一个原型链关系:

const obj1 = { a: 1 };const obj2 = Object.create(obj1);obj2.b = 2;obj1 是一个包含属性 a 的对象,其值为 1。obj2 通过 Object.create(obj1) 创建,并以 obj1 作为其原型。这意味着 obj2 继承了 obj1 的属性 a。在 obj2 上,我们显式地添加了一个属性 b,其值为 2。

此时,obj2 的属性有两个来源:

自身属性 b,值为 2。继承自原型对象 obj1 的属性 a,值为 1。

接下来,代码使用 Object.entries() 方法获取 obj2 的可枚举属性,并将每个属性的键和值进行处理:

const result = Object.entries(obj2).map(([key, value]) => key + value);

理解 Object.entries()

Object.entries(obj2) 返回一个包含 obj2 所有自身可枚举属性的键值对数组。注意,继承自原型链的属性不会包含在 Object.entries() 返回的数组中。

对于 obj2,Object.entries(obj2) 只会返回 [['b', 2]],因为 b 是 obj2 的自身属性。

处理 Object.entries() 的结果

代码通过 map 方法对 Object.entries() 返回的数组进行处理:

对于 ['b', 2],它将键和值拼接成字符串 'b2'。

因此,result 数组将包含 ['b2']。

输出结果

最终,console.log(result) 会输出 ['b2']:

console.log(result); // 输出 ['b2']结束

这道题目展示了 Object.entries() 方法如何处理对象的自身可枚举属性,同时忽略继承自原型链的属性。理解对象的属性继承和 Object.entries() 的行为对于正确解答这道题目至关重要。你答对了吗?欢迎在评论区分享你的答案和见解!

0 阅读:0