問題タブ [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.

0 投票する
1 に答える
70 参照

javascript - 親オブジェクトからアクセスできる一方で、フィールドを子オブジェクトのスコープに設定する方法はありますか?

私は JavaScript で OOP を使った経験をしています。私の目標は、その親オブジェクトから継承する他のいくつかのオブジェクトに共通のメソッドを保持する親オブジェクトを持つことです。つまり、親オブジェクトのメソッドが子のフィールドを読み取れるようにしたいのです。

継承には次の関数を使用します。

これらはオブジェクトの例です:

今、私はd.getCode()を返し'test'、をc.getCode()返すことを期待してい'foo'ます。問題は、両方が返されること'foo'です。変数geneticはスコープ内にあり、 /スコープAnimal内にはありません。から継承する新しいオブジェクトを作成するたびに、変数がオーバーライドされることを意味します。証拠:DogCatAnimalgenetic

変数をvargeneticのプライベート変数に設定できます。DogCat

問題は、geneticがプライベートにDogなったため、オブジェクトからアクセスできず、Animal継承全体が無意味になることです。

それを解決する方法はありますか?

編集:また、 /インスタンスgenticで変更できないように、プライベートにしたいです。DogCat

0 投票する
2 に答える
299 参照

javascript - ベースから「クラス」メンバーを拡張するjavascriptoopアクセス

JavaScriptでプロトタイプの継承を使用していますが、よくわからない問題が発生しました。多くのJS継承の例は、サブからスーパーのメンバーにアクセスすることを示していますが、スーパーからサブのメンバーにアクセスする必要があります。

パフォーマンステストマッピングWebサービスへのツールを構築しています。WMSプロトコルの複数のバージョンをサポートしたい。すべての共有機能/プロパティを可能な限りWMS基本クラスに保持し、必要な場合にのみ特定のバージョン実装の詳細を提供したいと思います。私のWMSv1.1.1関数は次のようになります。

私のwms関数(ショートバージョン)は次のとおりです。

次に、次のような呼び出しでこれをテストします

およびプロパティが正しく定義されたdescriptionParametersオブジェクトを取得しましたが、未定義です。servicerequestversion

wms111から正しいプロパティにアクセスする方法を誰かが理解するのを手伝ってもらえますか?

どんな助けでも大歓迎です。

0 投票する
1 に答える
216 参照

javascript - javascriptで正しく継承する方法は?

私の理解では、プロトタイプチェーンをチェックせずにオブジェクトに特定のメンバーがある場合、「hasOwnProperty」はtrueを返します。しかし、他のオブジェクトから継承すると、最後のオブジェクト自体にすべてのメンバーが表示されます。

次の例を考えてみましょう。

このコードは次のように出力します。

デバッガーを見ると、次のように表示されます。

しかし、私はその行を削除しapplyます。すべてがより理にかなっていますが、ベースオブジェクトは初期化されていません。

これで、デバッガーに次のように表示されます。

私の知る限り、これapplyは...スーパークラスコンストラクターを実行するようなものなので、スーパーメンバーは正しく初期化されますが、明らかに子オブジェクトの形状が変わります。

なぜこうなった?JSで継承する正しい方法(または少なくとも面倒ではない方法)は何ですか?

私はそれについていくつかの情報を調べています、そしてどうやら各開発者はそれを行う方法について異なる感情を持っています。

よろしく。

0 投票する
3 に答える
245 参照

javascript - 継承とObject.CreateinJavascript

このコードを見てください:

オブジェクトdictのdict[X].options.nameのすべてのプロパティの値が同じvalue(2)で、dict [X] .nameのプロパティの値が異なる理由がわかりませんか?

0 投票する
2 に答える
11976 参照

javascript - JavaScript 関数を継承するにはどうすればよいですか?

.__proto__非標準で非推奨です。

オブジェクトを作成するプロトタイプを継承し、そのオブジェクトを関数にする方法を教えてください。

Object.create関数ではなくオブジェクトを返します。

new Constructor関数ではなくオブジェクトを返します。

動機: - クロスブラウザfinherit

これが可能だとは思わないのでFunction.create、es-discuss メーリング リストに提案する必要があります。

関連する es-discuss メール

es-discuss スレッドで述べたように、これを可能にする ES:strawman<|プロトタイプ オペレーターが存在します。

を使用してどのように見えるか見てみましょう<|

0 投票する
2 に答える
4230 参照

javascript - プロトタイププログラミングにおけるオブジェクトとプロトタイプの違いは何ですか?

オブジェクトを作成および使用する「JavaScript の方法」を理解しようとしていますが、オブジェクトとプロトタイプの誤解に遭遇していると思います。

私が始めた新しいプロジェクトでは、プロトタイプの継承を試すことにしました。Object.create()これが、使用する予定のオブジェクトを作成し、それに基づいて次のようなオブジェクトを作成する必要があることを意味する場合、私は混乱しています。

または、一種のクラスを作成する必要があり、そのインスタンスを使用してそのインスタンスを作成する必要がある場合Object.create()

クラスベースの OOP でより多くの経験を積むと、後者の方法がより快適に感じられます (そして、それで十分な理由かもしれません)。しかし、プロトタイプの継承の精神は、最初の選択肢にあるように感じます。

プロトタイプ プログラミングの「精神」に近い方法はどれですか? それとも私はポイントを完全に見逃していますか?

0 投票する
2 に答える
212 参照

javascript - メモリを節約しながらJavaScriptを継承

これが古いトピックの再投稿である場合は申し訳ありませんが、検索しても同様の投稿が見つかりませんでした.

この次のコードは、私が行っているプロジェクトで javascript の継承を行う方法の例です。残念ながら、ほとんどのエンドユーザーはメモリが非常に少ない winXP + EI7 セットアップを使用しているため、メモリのすべてのビットを保存しようとしています。できます。

今私の質問は次のとおりです:コンストラクターの最後にparams = nullを設定して実際にメモリを節約しますか?window.namespace.MyClass.MySubclassポインターを同じ値に割り当てた後、MyClassポインターに同じことを行う必要がありますか? ?

0 投票する
5 に答える
81358 参照

javascript - javascriptでオブジェクトプロトタイプにアクセスするには?

すべての記事で、JavaScript はプロトタイプ ベースの言語であると書かれています。つまり、すべてのオブジェクトにはプロトタイプ (より正確には、プロトタイプ チェーン) があります。

これまでのところ、次のコード スニペットを試しました。

のプロトタイプ オブジェクトにアクセスするにはどうすればよいobject1ですか? それを行うブラウザー中立の方法はありますか (つまり、__proto__プロパティに依存しないということですか?このリンクを見ましたが、2010 年以降に新しい開発が行われている可能性があります)。

0 投票する
2 に答える
248 参照

javascript - クラスの実際のコンストラクターをjavascriptにリストすることが重要なのはなぜですか

私はjavascriptガーデンhttp://bonsaiden.github.com/JavaScript-Garden/ でjavascriptのプロトタイプについて読んでいましたが、その例の1つは次のようになります。

「Barを実際のコンストラクターとしてリストしてください」という行に注意してください。私はこれが何をするのか/何であるのか本当に迷っています。最後の行がある場合とない場合で、Bar()の新しいインスタンスを作成してみました。ただし、これらのインスタンスで「value」または「method」を呼び出すと、まったく同じものが返されます。だから私は、コンストラクターを指定する必要があるのだろうか(私はそれがなければならないと思います)?

ありがとうございました!!!

0 投票する
5 に答える
207 参照

javascript - Javascriptのプロトタイプの継承の奇妙さ

私はいくつかのjavascript継承の例を試していますが、これで壁にぶつかりました:

私はこれを取得していますが、理由がわかりません:

見つからないメソッドをコンストラクター関数に入れることができることは知っていますが、プロトタイプを変更してこれを実行しようとしています。私はここで何が間違っているのですか?