Das ist das Problem:
var Employee = new function(name)
// ------------^^^
{
this.name=name;
}
(Und das gleiche für PermanenetEmployee
.)
Sie nicht new
es wollen. new
ruft die Funktion auf. Das wollen Sie später machen, wie Sie es bei der Zuweisung an employee
haben.
Beachten Sie, dass die Art, wie Sie die Vererbung zwischen ihnen einrichten, ein Anti-Pattern ist. Um PermanenetEmployee
richtig "Unterklasse" Employee
, dies tun:
PermanenetEmployee.prototype = Object.create(Employee.prototype);
PermanenetEmployee.prototype.constructor = PermanenetEmployee;
nicht
var employee = new Employee("rahul");
PermanenetEmployee.prototype = employee;
... und dann PermanenetEmployee
name
akzeptieren und übergibt es an Employee
:
var PermanenetEmployee = function(name, annualsalary) {
Employee.all(this, name); // <====
// ...
};
. ..oder besser verwenden, verwenden Sie ES2015 ("ES6") class
(transpilieren, wenn Sie benötigen, zum Beispiel mit Babel).
Hier ist eine korrekte Einrichtung. Ich habe fixiert auch die Tippfehler in PermanenetEmployee
:
var Employee = function(name) {
this.name = name;
};
Employee.prototype.getName = function() {
return this.name;
};
var PermanentEmployee = function(name, annualSalary) {
Employee.call(this, name);
this.annualSalary = annualSalary;
};
// Set up subclass
PermanentEmployee.prototype = Object.create(Employee.prototype);
PermanentEmployee.prototype.constructor = PermanentEmployee.prototype;
PermanentEmployee.prototype.getAnnualSalary = function() {
return this.annualSalary;
};
// Using
var pe = new PermanentEmployee("Rahul", 5001);
console.log(pe.getName());
console.log(pe.getAnnualSalary());
Und mit ES2015:
class Employee {
constructor(name) {
this.name = name;
}
getName() {
return this.name;
}
}
class PermanentEmployee extends Employee {
constructor(name, annualSalary) {
super(name);
this.annualSalary = annualSalary;
}
getAnnualSalary() {
return this.annualSalary;
}
}
// Using
var pe = new PermanentEmployee("Rahul", 5001);
console.log(pe.getName());
console.log(pe.getAnnualSalary());
Auch hier beachten Sie, dass Sie, wenn Sie auf transpile brauchen möchte diese Syntax in der Wildnis verwenden (für jetzt).