3

私はJavaScriptに少し慣れていません。オブジェクト間の継承を実装するにはプロトタイプを使用する必要があることはわかっていますが、次のことを試してみたところ、完全に機能しました (Visual Studio 2012 を使用)。私は何を間違っていますか?

function Person(firstname, lastname, age, eyecolor) {
    this.firstname = firstname;
    this.lastname = lastname;
    this.age = age;
    this.eyecolor = eyecolor;

    this.name = function() {
        return this.firstname + " " + this.lastname;
    }
}

function Student(firstname, lastname, age, eyecolor, level) {
    this.level = level;
    Person.call(this, firstname, lastname, age, eyecolor);
}

var per = new Person("Abe", "Lincoln", 45, "green");

var obj = new Student("Abe", "Lincoln", 45, "green", "senior");

obj を調べると、Person と Student のプロパティがあり、obj.name() を呼び出して "Abe Lincoln" を取得できます。Visual Studio のイミディエイト ウィンドウでも、予想どおり、すべてのプロパティが互いに兄弟として表示されます。しかし、私はプロトタイプを使用していないので、明らかにこれは正しくありません。

私をまっすぐにしてください:)

前もって感謝します!

4

1 に答える 1

1

プロトタイプの継承を使用するには、nameメソッドを次のように配置しPerson.prototypeます。

function Person(firstname, lastname, age, eyecolor) {
    this.firstname = firstname;
    this.lastname = lastname;
    this.age = age;
    this.eyecolor = eyecolor;
}
Person.prototype.name = function() {
    return this.firstname + " " + this.lastname;
}

次に、 のインスタンスの.prototypeオブジェクトを作成します。StudentPerson

function Student(firstname, lastname, age, eyecolor, level) {
    this.level = level;
    Person.call(this, firstname, lastname, age, eyecolor);
}

// Make the prototype object of the Student constructor inherit from the
//    prototype object of the Person constructor.
Student.prototype = Object.create(Person.prototype)

そのためname、インスタンスごとに再作成されるのではなく、作成されたすべてのインスタンス間でメソッドが共有されるようになりました。

var per = new Person("Abe", "Lincoln", 45, "green");

var obj = new Student("Abe", "Lincoln", 45, "green", "senior");
于 2013-02-16T21:44:22.347 に答える