【问题标题】:can a literal object inherit from class?文字对象可以从类继承吗?
【发布时间】:2017-11-11 21:10:07
【问题描述】:

所以我在想一个文字对象是否可以从一个类中继承属性和方法。这是代码

var Foo = function(val1, val2) {
    this.prop1 = val1;
    this.prop2 = val2;
}

var bar = {
    //how to inherit properties from Foo class; also add new property
    prop3: 'val3'
};

【问题讨论】:

  • @Jonasw 虽然这可能不是一个适合 SO 的问题,但我想知道我们这些通过提问来学习的人应该如何跟上像你这样明显优越的人只是学习东西?也许您可以指导我们学习您卓越的“不要问问题来学习”技术? (对不起,我在那里问了2个问题,我不知道其他方式)
  • @gforce301 不!还是请教吧。我很乐意提供帮助。但是这个问题看起来像他将在他的书的下一章/他的教程的一部分中找到他的答案。这不是他今天的第一个问题......
  • "请先学习,后问。看来你现在是边问边学习" ?当然可以通过提问来学习。在学习的道路上没有垄断。如果一个人已经学会了,他们为什么还要问任何问题呢?除了他们自己
  • @guest271314 对不起,可能有点粗鲁
  • 我不会看任何书。我只是有这个问题,我找不到任何地方。所以我决定在这里发布我的问题。不过还是谢谢

标签: javascript oop constructor object-literal


【解决方案1】:

您可以通过创建Foo 的实例然后向该实例添加属性来实现此目的,如下所示:

var Foo = function(val1, val2) {
    this.prop1 = val1;
    this.prop2 = val2;
}

var x = new Foo('valOfProp1', 'valOfProp2');

x.prop3 = 'valOfAddedProp';

【讨论】:

  • 但如果我这样做,它仍然是一个文字对象吗?
【解决方案2】:

您的代码中没有继承。继承看起来像这样:

var Foo = function(val1, val2) {}
Foo.prototype={
    prop1:val1,
    prop2:val2
};

var bar = {
//how to inherit properties from Foo class; also add new property
prop3: val3
};

现在你可以这样做了:

Object.setPrototypeOf(bar, /*to*/ Foo.prototype);

或创建另一个对象:

var instance=new Foo();
Object.assign(instance,bar);

【讨论】:

  • 其实我正在考虑做这样的事情:var Foo = function(val1, val2) { this.prop1 = val1; this.prop2 = val2; }; var bar = { prop3: 'val3', inherit_from_Foo: function(val1, val2) { Foo.call(this, val1, val2); } };
  • @vincent thorpe 所以你想从构造函数继承?
  • 不一定我只是想找到一种方法从类继承到文字对象
  • @vincent thorpe 那么你可以使用 setPrototypeOf 来简单地设置 [[proto]] 原型
【解决方案3】:

你可以这样做;

var Foo = function(val1, val2) {
    this.prop1 = val1;
    this.prop2 = val2;
};

Foo.prototype.getProp = function(p){
  return this[p]; // NOT!! this.p
};

var bar = {
    //how to inherit properties from Foo class; also add new property
    prop3: "val3"
};

Object.setPrototypeOf(bar,Foo.prototype);
console.log(bar.getProp("prop1"));
console.log(bar.getProp("prop2"));
console.log(bar.getProp("prop3"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2011-04-04
    • 1970-01-01
    相关资源
    最近更新 更多