首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript传播与继承

Javascript传播与继承
EN

Stack Overflow用户
提问于 2018-09-04 09:30:33
回答 6查看 562关注 0票数 3

我对javascript开发相当陌生,并且仍然在学习概念。我有一个关于扩展“操作符”(...)的问题。它是否可以用作类似继承的机制,或者它是否有副作用使我避免这种情况?

示例

代码语言: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可以期望从任何继承的对象中继承。

这有效吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-09-04 09:42:06

您发布的代码正在按预期工作,因为来自A的属性被复制到B中。然而,这不是继承的示例,它只是一个浅浅的副本。

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

代码语言:javascript
运行
复制
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课程“

票数 5
EN

Stack Overflow用户

发布于 2018-09-04 09:35:49

你不能说它是固有的。这是个合并。通过写这个

代码语言:javascript
运行
复制
const B = {
  ...A,
  prop1: "updated_value1",
  prop3: "value3"
}

来自A的props1将被B中的prop1覆盖,所以是的,B.prop2()将返回updated_value1,这是完全公平的。

票数 1
EN

Stack Overflow用户

发布于 2018-09-04 09:36:44

在您的情况下,我倾向于使用对象赋值,因为可能出错的东西较少:

代码语言:javascript
运行
复制
const A = {
  prop1: "value1",
  prop2: function() {return this.prop1}
}

cont B = Object.assign(A, {
  prop1: "updated_value1",
  prop3: "value3"
});

但这仍然不是真正的遗产。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52163144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档