[解決済み】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
関連
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み] テスト
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】TypeError: res.status は関数ではありません。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] JavaScriptでクラスを定義するために使用できるテクニックと、そのトレードオフとは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】JavaScript ランタイムエラー:'$'が未定義です。
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】Vueが定義されていない