繁体   English   中英

从继承的实例创建javascript基类对象

[英]Create a javascript base class object from an inherited instance

我在这里使用公认的答案来实现继承: Javascript继承:调用超级构造函数还是使用原型链? 因此,我有一个继承自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对象将是这样的:{name:'mike',sex:'none'}

有没有一种方法,而无需显式设置每个属性?

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

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

如果仅通过检查/匹配键确定对象类型,则创建适配器是一种简单的解决方案。 如果要检查原型以确定对象类型,则可以在适配器中为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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM