問題タブ [prototypal-inheritance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - Node.js のモジュール内の継承に Object.create を使用する方法
一般的な車両情報を含むモジュール Vehicle があります。Vehicle オブジェクトに機能を追加する別のモジュール Car があります。
Car モジュールに Object.create を使用することを考えていますが、Object.create の呼び出し先がわかりません。
- Vehicle オブジェクトのインスタンスを取得し、Vehicle インスタンスをプロトタイプとして Object.create を実行するコンストラクタを Car モジュールに含める必要がありますか?
- それとも、createCar のように、Vehicle オブジェクトの関数で Object.create を実行する必要がありますか? この方法に関する私の問題は、Car が Vehicle から派生したものであることを気にする必要があることです。
- または、 Object.create が正しいアプローチである場合でも。
例やベスト プラクティスを教えていただければ幸いです。
アップデート:
解決しようとしている継承の問題をよりよく反映するように例を変更しました。
javascript - 適用関数のみを使用し、プロトタイププロパティを使用せずに、JavaScriptで継承を使用することは可能ですか?
JavaScriptオブジェクトの継承を学ぼうとしています。シェリーパワーズのJavaScriptクックブックを参照しています。
サブクラスでは、そのプロパティを使用するためにsuperclass.apply(this、arguments)を呼び出す必要があります。そして本によると、私はsubclass.prototype = new superclass();のようなものも書く必要があります。
ただし、subclass.prototype = new superclass();を使用しなくても機能することに注意しました。声明。以下は私のコードです。subclass.prototype = new superclass();の目的は何ですか。
javascript - javascript Backbone.jsモデルが親クラスの同じ「インスタンス」を共有するのはなぜですか?
編集:動作を示すために私の例を修正しました。
details
AbstractParentのプロパティを「インスタンスプロパティ」と呼ぶものにしたかったのですが、それは「静的プロパティ」のように機能します。これらの用語はjavascriptには適切ではないことに気付いたので、新しい子クラスを作成するときに、独自のAbstractParentプロトタイプを取得しないのはなぜですか?なぜ彼らは同じものを共有するのですか?
以下のコードでは、空のアラートを期待していますが、代わりに「新しい詳細」を取得します
details
これは、が配列の場合にのみこのように機能するようです。文字列またはオブジェクトの場合、およびによって共有されませch1
んch2
。
javascript - javascriptでの再帰的なプロトタイプ継承?
以前のものから継承した新しいオブジェクトを作成するために、しばらくこのコードを使用してきました。しかし、私はちょっとした驚きに出くわしました。
変更しようとして、代わりc.foo
に変更し、から継承しているため変更を表示しました。私が今見ている唯一の解決策は、の直接プロパティのみを変更することです:a.foo
c.foo
a
b
私が見逃しているより良い解決策があると確信しています!元のオブジェクトを変更する危険を冒さずに、古いオブジェクトから新しいオブジェクトを作成するにはどうすればよいですか?
javascript - 第2レベルのプロトタイプ関数への「this」参照を取得する
これは不可能だと私はかなり確信していますが、それを可能にする方法について誰かが独創的なアイデアを持っているかどうかを見たかったのです。
次のコードを機能させたい:
言い換えれば、私はこの場合にいることx.a.getThis
への言及を持ちたいのです。わかる?this
x
これを1レベル深く機能させるには、次のようにします。
1つは、これをプロトタイプとして機能させ、手動でバインドして「不正行為」を行わないようにすることthis
です。
上記は私が達成しようとしていることの完璧な機能例ですが、各インスタンスにすべての追加機能が必要なわけではありません:)
参考までに、ここでの実際のユースケースは、ノード内のCassandraオブジェクトを表すクラスを作成しており、を介してスーパー列->列ファミリー->列を参照し、foo.a.b
への参照を保持できるようにすることです。foo
深い機能。
javascript - JS関数のプロトタイププロパティは何に使用されますか?
プロパティを通じてjavascriptプロトタイプの継承を理解してい__proto__
ます。var f = function() {}
ただし、実行すると、prototype
プロパティに加えてプロパティが追加されることに気付きました__proto__
。prototype
プロパティチェーンには参加していないようです。それは正確に何をしますか?
javascript - プロトタイプの継承では使用でき、クラスでは使用できないパターンは何ですか?
プロトタイプの継承はクラスの継承よりも単純で柔軟であることに誰もが同意しているようです。私が読んだ文献で見たことがないのは、プロトタイプの継承ではできるが、クラシックではできないことの非常に多くの例です。だから私は簡単な質問をします:
プロトタイプ継承では使用でき、クラス継承では使用できないパターンとは?
javascript - プロトタイプ関数にアクセスできるプライベート変数を作成するには?
私はプロトタイプの継承とクラスの作成をより深く把握しようとしています (他の方法があることはわかっていますが、この目的のためにプロトタイプを把握しようとしています)。私の質問は次のコード例を使用することです。内にプライベート変数を作成する方法がありTree
、Fruit
それは関数では返されませんが、プロトタイプ関数genus
およびbulk
?には引き続きアクセスできます。
編集:プロトタイプ関数でアクセスできるプライベート変数に置き換えようとしてthis.name
います。this.size
分かりづらくてすみません!
javascript - Object.createと直接のプロトタイプ継承
私はEcmaScript5仕様でObject.createをいじっており、多重継承型の構造を作成しようとしています。
a、b、cといういくつかの関数があるとします。プロトタイプを扱うだけで、私はこれを行うことができます:
しかし、Object.createを使用して、私はこれを行うでしょう:
どちらの方法でも同じ結果が得られると思います。
コンストラクター関数の代わりにオブジェクトに戻るので、これはちょっと不格好なようです。通常のプロトタイプの継承を行うことは、煩わしさが少なく、動作するために特別な処理を必要としないモジュラーアプリケーションにとってより理にかなっているように思われます。
私は何かが足りないのですか?コンストラクターを作成してObject.createを作成しようとする利点はありますか?または、これは既存のオブジェクトをコピーする場合にのみ役立ちますか?プロトタイプにアタッチされたプロパティと関数にのみアクセスしたいので、後でオブジェクトに追加された関数とプロパティにはアクセスしません。
または、これはどうですか(またはより良いディープコピーを使用しますが、考え方は同じです)?
javascript - プロパティとしてアクセスすると、プロトタイプコンストラクターの変数が未定義になるのはなぜですか?
なぜmyPerson.age
未定義なのですか?
ofPerson
が指す関数コンストラクターの変数が何であるかを明確に設定しました。いいえ?.prototype
myPerson