問題タブ [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.
javascript - 親オブジェクトからアクセスできる一方で、フィールドを子オブジェクトのスコープに設定する方法はありますか?
私は JavaScript で OOP を使った経験をしています。私の目標は、その親オブジェクトから継承する他のいくつかのオブジェクトに共通のメソッドを保持する親オブジェクトを持つことです。つまり、親オブジェクトのメソッドが子のフィールドを読み取れるようにしたいのです。
継承には次の関数を使用します。
これらはオブジェクトの例です:
今、私はd.getCode()
を返し'test'
、をc.getCode()
返すことを期待してい'foo'
ます。問題は、両方が返されること'foo'
です。変数genetic
はスコープ内にあり、 /スコープAnimal
内にはありません。から継承する新しいオブジェクトを作成するたびに、変数がオーバーライドされることを意味します。証拠:Dog
Cat
Animal
genetic
変数をvargenetic
のプライベート変数に設定できます。Dog
Cat
問題は、genetic
がプライベートにDog
なったため、オブジェクトからアクセスできず、Animal
継承全体が無意味になることです。
それを解決する方法はありますか?
編集:また、 /インスタンスgentic
で変更できないように、プライベートにしたいです。Dog
Cat
javascript - ベースから「クラス」メンバーを拡張するjavascriptoopアクセス
JavaScriptでプロトタイプの継承を使用していますが、よくわからない問題が発生しました。多くのJS継承の例は、サブからスーパーのメンバーにアクセスすることを示していますが、スーパーからサブのメンバーにアクセスする必要があります。
パフォーマンステストマッピングWebサービスへのツールを構築しています。WMSプロトコルの複数のバージョンをサポートしたい。すべての共有機能/プロパティを可能な限りWMS基本クラスに保持し、必要な場合にのみ特定のバージョン実装の詳細を提供したいと思います。私のWMSv1.1.1関数は次のようになります。
私のwms関数(ショートバージョン)は次のとおりです。
次に、次のような呼び出しでこれをテストします
およびプロパティが正しく定義されたdescriptionParameters
オブジェクトを取得しましたが、未定義です。service
request
version
wms111から正しいプロパティにアクセスする方法を誰かが理解するのを手伝ってもらえますか?
どんな助けでも大歓迎です。
javascript - javascriptで正しく継承する方法は?
私の理解では、プロトタイプチェーンをチェックせずにオブジェクトに特定のメンバーがある場合、「hasOwnProperty」はtrueを返します。しかし、他のオブジェクトから継承すると、最後のオブジェクト自体にすべてのメンバーが表示されます。
次の例を考えてみましょう。
このコードは次のように出力します。
デバッガーを見ると、次のように表示されます。
しかし、私はその行を削除しapply
ます。すべてがより理にかなっていますが、ベースオブジェクトは初期化されていません。
これで、デバッガーに次のように表示されます。
私の知る限り、これapply
は...スーパークラスコンストラクターを実行するようなものなので、スーパーメンバーは正しく初期化されますが、明らかに子オブジェクトの形状が変わります。
なぜこうなった?JSで継承する正しい方法(または少なくとも面倒ではない方法)は何ですか?
私はそれについていくつかの情報を調べています、そしてどうやら各開発者はそれを行う方法について異なる感情を持っています。
よろしく。
javascript - 継承とObject.CreateinJavascript
このコードを見てください:
オブジェクトdictのdict[X].options.nameのすべてのプロパティの値が同じvalue(2)で、dict [X] .nameのプロパティの値が異なる理由がわかりませんか?
javascript - JavaScript 関数を継承するにはどうすればよいですか?
.__proto__
非標準で非推奨です。
オブジェクトを作成するプロトタイプを継承し、そのオブジェクトを関数にする方法を教えてください。
Object.create
関数ではなくオブジェクトを返します。
new Constructor
関数ではなくオブジェクトを返します。
動機: - クロスブラウザfinherit
これが可能だとは思わないのでFunction.create
、es-discuss メーリング リストに提案する必要があります。
es-discuss スレッドで述べたように、これを可能にする ES:strawman<|
プロトタイプ オペレーターが存在します。
を使用してどのように見えるか見てみましょう<|
javascript - プロトタイププログラミングにおけるオブジェクトとプロトタイプの違いは何ですか?
オブジェクトを作成および使用する「JavaScript の方法」を理解しようとしていますが、オブジェクトとプロトタイプの誤解に遭遇していると思います。
私が始めた新しいプロジェクトでは、プロトタイプの継承を試すことにしました。Object.create()
これが、使用する予定のオブジェクトを作成し、それに基づいて次のようなオブジェクトを作成する必要があることを意味する場合、私は混乱しています。
または、一種のクラスを作成する必要があり、そのインスタンスを使用してそのインスタンスを作成する必要がある場合Object.create()
。
クラスベースの OOP でより多くの経験を積むと、後者の方法がより快適に感じられます (そして、それで十分な理由かもしれません)。しかし、プロトタイプの継承の精神は、最初の選択肢にあるように感じます。
プロトタイプ プログラミングの「精神」に近い方法はどれですか? それとも私はポイントを完全に見逃していますか?
javascript - メモリを節約しながらJavaScriptを継承
これが古いトピックの再投稿である場合は申し訳ありませんが、検索しても同様の投稿が見つかりませんでした.
この次のコードは、私が行っているプロジェクトで javascript の継承を行う方法の例です。残念ながら、ほとんどのエンドユーザーはメモリが非常に少ない winXP + EI7 セットアップを使用しているため、メモリのすべてのビットを保存しようとしています。できます。
今私の質問は次のとおりです:コンストラクターの最後にparams = nullを設定して実際にメモリを節約しますか?window.namespace.MyClass.MySubclassポインターを同じ値に割り当てた後、MyClassポインターに同じことを行う必要がありますか? ?
javascript - javascriptでオブジェクトプロトタイプにアクセスするには?
すべての記事で、JavaScript はプロトタイプ ベースの言語であると書かれています。つまり、すべてのオブジェクトにはプロトタイプ (より正確には、プロトタイプ チェーン) があります。
これまでのところ、次のコード スニペットを試しました。
のプロトタイプ オブジェクトにアクセスするにはどうすればよいobject1
ですか? それを行うブラウザー中立の方法はありますか (つまり、__proto__
プロパティに依存しないということですか?このリンクを見ましたが、2010 年以降に新しい開発が行われている可能性があります)。
javascript - クラスの実際のコンストラクターをjavascriptにリストすることが重要なのはなぜですか
私はjavascriptガーデンhttp://bonsaiden.github.com/JavaScript-Garden/ でjavascriptのプロトタイプについて読んでいましたが、その例の1つは次のようになります。
「Barを実際のコンストラクターとしてリストしてください」という行に注意してください。私はこれが何をするのか/何であるのか本当に迷っています。最後の行がある場合とない場合で、Bar()の新しいインスタンスを作成してみました。ただし、これらのインスタンスで「value」または「method」を呼び出すと、まったく同じものが返されます。だから私は、コンストラクターを指定する必要があるのだろうか(私はそれがなければならないと思います)?
ありがとうございました!!!
javascript - Javascriptのプロトタイプの継承の奇妙さ
私はいくつかのjavascript継承の例を試していますが、これで壁にぶつかりました:
私はこれを取得していますが、理由がわかりません:
見つからないメソッドをコンストラクター関数に入れることができることは知っていますが、プロトタイプを変更してこれを実行しようとしています。私はここで何が間違っているのですか?