Javascript 传播与继承

Ben*_*Ben 3 javascript inheritance spread-syntax

我对 javascript 开发还很陌生,仍在学习概念。我有一个关于价差“运算符”(...)的问题。它可以用作类似继承的机制还是它有应该让我避免这种情况的副作用?

例子

const A = {
  prop1: "value1",
  prop2: function() {return this.prop1}
}

const B = {
  ...A,
  prop1: "updated_value1",
  prop3: "value3"
}
Run Code Online (Sandbox Code Playgroud)

在这里可以看到 B 已经从 A 继承,A.prop2()返回value1,并且B.prop2()返回updated_value1具有从任何继承对象所期望的。

这是有效的吗?

Big*_*tos 5

您发布的代码按预期工作,因为 A 的属性被复制到 B。然而,这不是继承的例子,它只是一个浅拷贝。

在您的示例中,所有属性都是基元,考虑如果我们添加对 A 的引用会发生什么:

const A = {
  prop1: "value1",
  prop2: function() {return this.prop1},
  obj: { value: 1 }
}

const B = {
  ...A,
  prop1: "updated_value1",
  prop3: "value3"
}
Run Code Online (Sandbox Code Playgroud)

现在,更改A.obj.value也会修改B.obj.value,这基本上会使所有 Bobj与 A共享它们并在它们之间共享。这在某些情况下可能很有用,但它不完全是继承。

对于继承,最好使用“Javascript 类”