【问题标题】:Create a javascript base class object from an inherited instance从继承的实例创建 javascript 基类对象
【发布时间】:2016-03-11 20:59:42
【问题描述】:

我在这里使用公认的答案来实现继承:Javascript inheritance: call super-constructor or use prototype chain?。所以我有一个从 A 类继承的 B 类。B 类在其原型上具有 B 类对象独有的属性/功能。

编辑:更清楚地说,我已经设置了继承链,这不是我需要帮助的。对象定义如下:

function classA() {
    this.name= '';
    this.sex = '';
}

function classB(){
  classA.call(this, arguments);
  this.age= 0;
}

在我的代码中,我创建了一个新的 B 类对象并设置了一些属性:

var _b = new ClassB();
_b.name = 'mike';   -- name is a property of ClassA
_b.sex = 'none';    -- sex  a property of ClassA
_b.age = 20;        -- age is only a property of Classb

我正在调用一个只接受“类型”ClassA 对象的 API。所以我需要创建一个 ClassA 对象并将它的所有属性设置为来自 _b 的值,但只有属于 ClassA 的属性。

在本例中,新创建的 ClassA 对象将是: { 名称:'迈克', 性别:“无” }

有没有办法在不显式设置每个属性的情况下做到这一点?

var _a = new ClassA();
_a.name = _b.name;
_a.sex = _b.sex;

我不想每次向 ClassA 添加新属性时都必须更改代码

【问题讨论】:

  • 你可能会觉得这个article很有趣。

标签: javascript class inheritance prototype base


【解决方案1】:

如果对象类型仅由检查/匹配键确定,则创建适配器是一种简单的解决方案。如果您正在检查原型以确定对象类型,则可以在适配器中为 newObj 实例化该类型的空对象。

var foo = {
    a: 'alpha',
    b: 'beta',
};

var bar = {
    a: 'alfa',
    b: 'bravo',
    c: 'charlie'
};

function adapt(objA, objB) {//only copy properties common to objA from objB
    var newObj = {};
    for (var prop in objA) {
        var val = objB[prop];
        newObj[prop] = val;
    }

    return newObj;
}

console.log(adapt(foo, bar));

【讨论】:

  • 谢谢,是的,这正是我所需要的。我在想我解释得不是很好,很高兴你能理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2018-10-06
  • 2019-01-06
  • 2011-02-21
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多