Setter 在 javascript
Setter in javascript
为什么 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"
// }
Link 到 CodePen:https://codepen.io/anon/pen/ZmoMzj?editors=1112
如文档中的 example 所示,它指出:
Note that name
is not defined and any attempts to access it will result in undefined.
name
在前面的引述中用于声明 属性 setter name
,如您的示例。
因此,您已经将 getter 定义为 return 它的结果。我建议您按照文档本身提供的示例进行操作。
您观察到的是 Object.assign()
.
默认行为的结果
1。 person1 的 'name' 属性 是 'undefined'
如果对象中没有定义属性,只定义了setter,任何直接访问属性的尝试都会return undefined
.您应该在 person1
中定义 属性 name
或 getter 以将其访问为 person1.name
.
这就是为什么当您登录 person1
时,name
是 undefined
。
person1.name
未定义 return 因为 person1
只有 setter
而没有 getter
2。 person2 的 'name' 属性 有一个值
这两行执行时,
const person2 = {}
Object.assign(person2, person1)
getters 和 setters 未复制到 Object.assign()
中,但它们是调用并在此过程中创建新属性。由于 set name(newName)
没有等效的 getter
或 person1
中的 属性 name
,因此 name
属性 31=] 在 Object.assign()
期间被分配 undefined
。所以这将是 Object.assign()
末尾的 person2
person2 = { name: undefined };
没有任何 getter 或 setter.
并且,当您调用此行时
person2.name = 'z'
名称 属性 被分配了值 z
。
person2.name
是 return 值,因为 person2
没有 getter 或 setter,只有 returns 赋值。
为什么 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"
// }
Link 到 CodePen:https://codepen.io/anon/pen/ZmoMzj?editors=1112
如文档中的 example 所示,它指出:
Note that
name
is not defined and any attempts to access it will result in undefined.
name
在前面的引述中用于声明 属性 setter name
,如您的示例。
因此,您已经将 getter 定义为 return 它的结果。我建议您按照文档本身提供的示例进行操作。
您观察到的是 Object.assign()
.
1。 person1 的 'name' 属性 是 'undefined'
如果对象中没有定义属性,只定义了setter,任何直接访问属性的尝试都会return undefined
.您应该在 person1
中定义 属性 name
或 getter 以将其访问为 person1.name
.
这就是为什么当您登录 person1
时,name
是 undefined
。
person1.name
未定义 return 因为 person1
只有 setter
而没有 getter
2。 person2 的 'name' 属性 有一个值
这两行执行时,
const person2 = {}
Object.assign(person2, person1)
getters 和 setters 未复制到 Object.assign()
中,但它们是调用并在此过程中创建新属性。由于 set name(newName)
没有等效的 getter
或 person1
中的 属性 name
,因此 name
属性 31=] 在 Object.assign()
期间被分配 undefined
。所以这将是 Object.assign()
person2
person2 = { name: undefined };
没有任何 getter 或 setter.
并且,当您调用此行时
person2.name = 'z'
名称 属性 被分配了值 z
。
person2.name
是 return 值,因为 person2
没有 getter 或 setter,只有 returns 赋值。