1. ホーム
  2. ジャバスクリプト

[解決済み】prototypeコンストラクタの設定が必要なのはなぜですか?

2022-03-29 03:56:18

質問

は、MDN の記事中の継承に関する部分です。 オブジェクト指向のJavascript入門 というのは、prototype.constructorを設定していることに気がついたからです。

// correct the constructor pointer because it points to Person
Student.prototype.constructor = Student;  

これは何か重要な目的を果たすのでしょうか?省略してもいいのでしょうか?

どのように解決するのですか?

常に必要というわけではありませんが、使い道はあります。例えば、ベースとなる Person クラスがあります。こんな感じ。

// define the Person Class  
function Person(name) {
    this.name = name;
}  

Person.prototype.copy = function() {  
    // return new Person(this.name); // just as bad
    return new this.constructor(this.name);
};  

// define the Student class  
function Student(name) {  
    Person.call(this, name);
}  

// inherit Person  
Student.prototype = Object.create(Person.prototype);

では、新しい Student をコピーしてください。

var student1 = new Student("trinth");  
console.log(student1.copy() instanceof Student); // => false

のインスタンスではないので、コピーは Student . これは、(明示的なチェックがなければ) Student クラスからのコピーです。私たちが返すことができるのは Person . しかし、もしコンストラクタをリセットしていたら。

// correct the constructor pointer because it points to Person  
Student.prototype.constructor = Student;

...すると、すべてが期待通りに動作します。

var student1 = new Student("trinth");  
console.log(student1.copy() instanceof Student); // => true