私はJavaScriptオブジェクトのいくつかのメソッドを子クラスで継承できるようにしようとしていますが、親クラスのインスタンス化を許可したくありません。JavaScriptで抽象関数に機能を入れる方法
/**
* 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
学生対象のジョーにgetFirstNameを呼び出そうとするとき、私はエラーを取得し、このコードで:ここで私はこれを説明するために書いたいくつかのコードです。 getFirstNameにサブクラスが継承できるようにすると非常に便利なようです。
親クラスのgetName関数を定義して、Studentなどのサブクラスによって継承されたその機能を持つことができるようにしたいと思っています。それを行う方法はありますか?私は本当に助けていただければ幸いです!
あなたが得る方法を必要といけません。すべてがjavascriptのオブジェクトなので、 'joe.firstName'を使うことができます。 http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/、https://developer.mozilla.org/en-US/docs/Web/JavaScript/をご覧ください。ガイド/ Working_with_Objects – Craicerjack
コードのポイントはそれらの値を取得することではありませんでした。これは私がJavaScriptの抽象概念を理解できるように取り組んでいる別のプロジェクトのダミーコードです。私の実際のコードのこれらのメソッドはデータで動作します。私はちょうど親クラスからその関数を継承して、呼び出せるようにしたい。どうすればいいのか知っていますか? –