gpt4 book ai didi

javascript - javascript 中的二传手

转载 作者:行者123 更新时间:2023-11-29 18:46:30 24 4
gpt4 key购买 nike

为什么 person1 的“name”属性是“undefined”而 person2 的“name”属性有值?

    const person1 = {
set name(newName) {
console.log(newName)
}
}

const person2 = {}
Object.assign(person2, person1)

person1.name = 'x'
// logs "x"

person2.name = 'z'
// doesnt log anything

console.log("Person1", person1)
// "Person1" Object {
// name: undefined
// }

console.log("Person2", person2)
// "Person2" Object {
// name: "z"
// }

CodePen 链接:https://codepen.io/anon/pen/ZmoMzj?editors=1112

最佳答案

您所观察到的是 Object.assign() 的默认行为的结果.

1。 person1 的 'name' 属性是 'undefined'

如果该属性没有在对象中定义,而只定义了一个setter,任何直接访问该属性的尝试都将返回undefined。 .您应该定义属性 nameperson1或者以 person1.name 的形式访问它.

这就是为什么当您登录 person1 时, nameundefined .

person1.name返回未定义,因为 person1只有一个 setter没有 getter

2。 person2 的 'name' 属性有一个值

当这两行被执行时,

const person2 = {}
Object.assign(person2, person1)

getterssetters 没有被复制到 Object.assign() 中但是它们被调用并在此过程中创建新属性。自 set name(newName)没有等效的 getter或属性(property)nameperson1 , name属性(property) person2已分配 undefinedObject.assign()期间.所以这将是你的 person2Object.assign() 的末尾

person2 = { name: undefined };

没有任何 getter 或 setter。

并且,当你调用这一行时

person2.name = 'z' 

name 属性被赋予值 z .

person2.name正在返回值,因为 person2没有 getter 或 setter,只返回分配的值。

关于javascript - javascript 中的二传手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53460060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com