Ich versuche es so zu machen, dass ich einige Methoden in einem JavaScript-Objekt durch eine Kindklasse vererben lassen kann, aber ich möchte nicht zulassen, dass die Elternklasse instanziiert wird . Hier ist ein Code, den ich schrieb, dies zu veranschaulichen:Wie man Funktionalität in abstrakte Funktion in JavaScript einfügt
/**
* Shows how basic abstraction works with JavaScript
*/
//Define the person object with a first name, last name, and an age
function Person(firstName, lastName, age) {
//Make it so that this object cannot be instantiated by identifying its constructor
if(this.constructor === Person) {
throw new Error("Can't instantiate an abstract class of type Person!");
}
//Assign instance variables
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
//Create simple get methods
this.getName = function(){
return this.firstName + " " + this.lastName;
}
this.getFirstName = function() {
return this.firstName;
}
this.getLastName = function() {
return this.lastName;
}
this.getAge = function() {
return this.age;
}
}
//Define the student constructor
function Student(firstName, lastName, age, subject) {
//Assign the instance variables including the new subject variable
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.subject = subject;
//Add a new function to get the subject from Student
this.getSubject = function() {
return this.subject;
}
}
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
//Testing the inheritance
var joe = new Student("Joe", "Shmo", 33, "Computer Science");
console.log("First Name: " + joe.getFirstName()); //The getFirstName() function is defined in the superclass
console.log("Subject: " + joe.getSubject()); //The getSubject() function is defined in the subclass
Mit diesem Code, den ich eine Fehlermeldung erhalten, wenn sie versuchen getFirstName auf dem Student-Objekt joe zu nennen. Es scheint sehr nützlich zu sein, dass getFirstName von der Unterklasse geerbt werden kann.
Ich möchte wirklich die getName-Funktion in der Elternklasse definieren, so dass ich dann nur diese Funktionalität von den Unterklassen wie Student geerbt haben kann. Gibt es eine Möglichkeit, das zu tun? Ich würde wirklich jede Hilfe schätzen!
Sie brauchen nicht Methoden zu erhalten. Da alles ein Objekt in Javascript ist, können Sie einfach 'joe.firstName' verwenden. Sehen Sie sich http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/ und https://developer.mozilla.org/en-US/docs/Web/JavaScript/ an. Guide/Working_with_Objects – Craicerjack
Der Punkt des Codes war nicht, diese Werte zu bekommen. Dies ist Dummy-Code für ein anderes Projekt, an dem ich gerade arbeite, um die Abstraktion in JavaScript zu verstehen. Diese Methoden in meinem eigentlichen Code werden mit Daten arbeiten. Ich möchte nur sein, um diese Funktion von einer Elternklasse zu erben, so dass ich es anrufen kann. Weißt du, wie ich das machen könnte? –