类构造函数javascript中的条件

类构造函数javascript中的条件,javascript,node.js,ecmascript-6,es6-class,Javascript,Node.js,Ecmascript 6,Es6 Class,我有这个密码 class Person{ constructor(person){ this._name=person._name; this._age=person._age; } } class Employee extends Person{ constructor(person){ if(person instanceof Person){ super(person); }else{ throw 'passed obje

我有这个密码

class Person{
  constructor(person){
    this._name=person._name;
    this._age=person._age;
  }
}

class Employee extends Person{
  constructor(person){
    if(person instanceof Person){
    super(person);
    }else{
       throw 'passed object is not a valid person object';
    }
  }
}

let emp=new Employee({_name:'Uday',_age:24});
console.log(emp);

我只想在得到有效的person对象时调用super(person)。我收到一个错误
此错误尚未初始化-super()未在中调用。如何确保只将有效的
person
对象传递给super类?

不知道它是否在typescript中,但这可能会解决您的问题

class Person{
  constructor(person){
  this._name=person._name;
  this._age=person._age;
  }
}

 class Employee extends Person{
    constructor(person){
    let temp = null;
    if(!(person instanceof Person))
     throw new Error("message");
     super(temp);
  }
}

let emp=new Employee({_name:'Uday',_age:24});
console.log(emp);

下面是我的代码。我认为主要的问题是,您正在if语句中调用
super
。如果
person
不是
person
类的实例,它将永远不会被调用,因此巴贝尔会抱怨

班级人员{
建造师(人){
这个。_name=人。_name;
这个年龄=人;
}
}
类非个人{
建造师(人){
这个。_name=人。_name;
这个年龄=人;
}
}
类雇员扩展个人{
建造师(人){
如果(!(个人实例){
抛出新错误(“不是人!”);
}
超级(人);
}
}
let per=新人({姓名:'Bah',年龄:20});
let per2=新的NotPerson({姓名:'Bah','U年龄:20});
设emp=新员工(per);
//设emp2=新员工(per2);这将抛出一个错误!
控制台日志(emp);

//控制台日志(emp2)为什么它应该是person的实例?在对
newemployee
的调用中,您传递的不是person对象,而是一个看起来像person的普通对象。另外,如果
不是您想要的,您希望发生什么
new
将始终返回构造的对象,当然,除非抛出错误。如果传递到
Employee
构造函数的对象不是有效的
Person
对象,我想抛出异常。因此,您希望底部的示例代码抛出异常,对吗?我认为您可以稍微修改一下您的超类,以便在传递给它的参数为null时抛出异常。然后,在派生类中,检查此人是否有效。如果不是,则传递super(null),则不能,必须在构造函数的第一个位置调用
super
方法。你在这里没有连贯性,你不能从Person中扩展,不能调用super(Person)
,这是没有意义的。所以你必须在之后或者在Person类中检查这个