我对javascript开发相当陌生,并且仍然在学习概念。我有一个关于扩展“操作符”(...
)的问题。它是否可以用作类似继承的机制,或者它是否有副作用使我避免这种情况?
示例
const A = {
prop1: "value1",
prop2: function() {return this.prop1}
}
const B = {
...A,
prop1: "updated_value1",
prop3: "value3"
}
B这里可以看到是从A继承的,A.prop2()
返回value1
,而B.prop2()
返回updated_value1
可以期望从任何继承的对象中继承。
这有效吗?
发布于 2018-09-04 09:42:06
您发布的代码正在按预期工作,因为来自A的属性被复制到B中。然而,这不是继承的示例,它只是一个浅浅的副本。
在您的示例中,所有属性都是原语,请考虑如果我们添加对A的引用会发生什么:
const A = {
prop1: "value1",
prop2: function() {return this.prop1},
obj: { value: 1 }
}
const B = {
...A,
prop1: "updated_value1",
prop3: "value3"
}
现在,更改A.obj.value
还将修改B.obj.value
,这将使所有B与A和它们之间共享它们的obj
。这在某些情况下可能很有用,但并不完全是继承。
对于继承,最好使用"Javascript课程“
发布于 2018-09-04 09:35:49
你不能说它是固有的。这是个合并。通过写这个
const B = {
...A,
prop1: "updated_value1",
prop3: "value3"
}
来自A的props1
将被B中的prop1
覆盖,所以是的,B.prop2()
将返回updated_value1
,这是完全公平的。
发布于 2018-09-04 09:36:44
在您的情况下,我倾向于使用对象赋值,因为可能出错的东西较少:
const A = {
prop1: "value1",
prop2: function() {return this.prop1}
}
cont B = Object.assign(A, {
prop1: "updated_value1",
prop3: "value3"
});
但这仍然不是真正的遗产。
https://stackoverflow.com/questions/52163144
复制相似问题