問題タブ [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名前空間が
以下の構成を使用すると、プライベート変数、パブリックおよびプライベート関数を持つことができます。では、なぜ名前空間を作成するためのさまざまな方法がすべてあるのでしょうか。
名前空間は、関連する動作とスコープを持つ関数とは根本的に異なりますか?
グローバル名前空間、たとえばブラウザのウィンドウオブジェクトを、作成する関数が多すぎることで汚染しないという点がわかりますが、それは以下でも実現できます。
基本的なポイントが欠けているようです。
javascript - オブジェクトの継承
Javascript の継承は原型的であると読みましたが、それはどういう意味ですか?プログラマによって定義されたオブジェクトは、window などの事前定義されたオブジェクトのプロパティをどのように継承できますか? たとえば、自分のクラスに関数 eval() が必要です。どうすれば達成できますか?
javascript - JavaScriptタイプからメソッドを削除するにはどうすればよいですか
サードパーティのWebサイトで実行されるJavaScriptが少しあり、配列型に関数を一時的に追加する必要があります。
私は優れた開発者になり、他の人のコードの型システムをできるだけ汚染しないようにしたいので、関数が不要になったら、関数を再度削除したいと思います。これは可能ですか?
javascript - Javascript によるコードの再利用 プロトタイプの継承
プロトタイプの継承でコードを再利用する方法に少し混乱しています。http://alexsexton.com/?p=51の例に従っています。ここでは Speaker オブジェクトを作成し、jQuery でブリッジします。
例のスピーカーに似た新しいスピーカーが欲しいとしますが、追加のサウンドファイルが追加されました。私が考えることができる唯一のコードは次のようなものです:
しかし、このアプローチは実際にはかなり「古典的」に聞こえます。を通じて「スーパー」を呼び出していSpeaker.xxx.call
ます。差分継承を行うことになっていると思いますが、方法がわかりませんか? 何か助けはありますか?
javascript - すべてのオブジェクトが使用できる関数で Object オブジェクトを拡張する
Object の拡張に対する私の動機は、単純にデータを格納することを目的としたオブジェクト (Java の「ハッシュマップ」など) を簡単に処理できるようにしたいということです。hashmap.size()を簡単にやりたい。
私のオブジェクトには、次のように作成されたときに空だった objData というプロパティがあるとしましょう:
私のオブジェクトには、次のように objData にデータを追加できるメソッドがいくつかあります。
また、私のオブジェクトには、objData にアクセスするいくつかのメソッドもあります。
もちろん、そのような方法は存在しません。これが、Object オブジェクトを拡張する私の動機です。
これで、次のいずれかを実行できるはずです。
また:
しかし、実際には、私が書いたコードとはまったく関係のないページを読み込もうとすると、エラーが発生します。Google マップ API の main.js でエラーがスローされます。ブードゥー。
そこで、Object.prototype ではなく実際のオブジェクトを拡張するように拡張を変更します。
そして今、Firefoxで次のエラーが発生します。
ここで何が欠けていますか?
javascript - Javascript とプロトタイプの継承
Javascriptのこれら2つのステートメントに違いはありますか?
そしてこれは?:
もう1つ、なぜできないのですか:
どうもありがとう!
javascript - プロトタイプを変更せずにコアタイプを拡張する
プロトタイプを変更せずに、コアJavaScriptタイプ(文字列、日付など)をどのように拡張しますか?たとえば、いくつかの便利なメソッドを使用して派生文字列クラスを作成したいとします。
このエラーは、文字列ベースのメソッド(この場合は「分割」)に起因しているようです。これは、そのメソッドが文字列以外のオブジェクトに適用されているためです。しかし、文字列以外のオブジェクトに適用できない場合、実際にそれらを自動的に再利用できますか?
[編集]
明らかに私の試みには多くの点で欠陥がありますが、それは私の意図を示していると思います。少し考えてみると、Stringで明示的に呼び出すことなく、Stringプロトタイプオブジェクトの関数を再利用することはできないようです。
コアタイプをそのまま拡張することは可能ですか?
javascript - Javascript - プロトタイプの継承の問題と一般的な理解の問題の可能性
私は JavaScript を学び始めました。何が起こっているのかよくわからないまま何年も JavaScript を使っていたので、それについて何かをする時が来たと判断しました。さらに、JavaScript を使用してアプリケーションのスクリプトを作成できるプロジェクトに取り組んでいます。
それで、やだやだはもう十分です。私の問題はプロトタイプの継承に関連しています。今ではそれがどのように機能するかはわかっていると思いますが、問題があるかもしれません。基本的なアイデアは、すべてのオブジェクト (まあ、すべてのオブジェクトではありません ;-)) にはプロトタイプがあり、実際のオブジェクトがプロトタイプチェーンの最後に到達するまですべてのリクエストを処理できない場合は、すべてのリクエストが委任されます (オブジェクトもプロトタイプを持つことができますよね?)。
私のアプリケーションでは、大規模なフィルタリングが発生する予定であり、ユーザー (あまり技術的ではないため、できるだけ簡単にする必要があります) に、追加の呼び出しごとに結果セットを絞り込む単純なフィルター コマンドをチェーンする方法を提供したいと考えています。どういう意味ですか?スムーズ。このような:
zoo
は常にスコープ内にあり、動物園の動物と追加のプロパティを含むオブジェクトです。Container
したがって、この例のすべてのメソッド呼び出しで返されるオブジェクトを次のようにします (これを呼び出します)。
ここまでは順調ですね。しかし、Zoo も入れ物にしたいのです。これが私の本当の質問の出番です。動物園は動物の開始セットを取得するために非常に高価なことをしなければならないので、それらを遅延ロードしたいと思います。動物園がgetAnimals()
リクエストを受け取ると、データが取得されます。
私のアイデアは、Zoo のプロトタイプを、Zoo からデータを取得するコンテナに設定することでした。getAnimals()
しかし、プロトタイプ (コンテナー) から動物園のメソッドにアクセスする方法が見つかりません。で試してみましたthis
が、方法が見つかりません。
私がやりたいことをするコードを書く方法はありますか? 私はブラウザ環境にいないことに注意してください。アプリケーションに JavaScript (1.7) を埋め込みます。
ありがとう!
javascript - javascriptでのプロトタイププロパティの使用は何ですか?
プロトタイププロパティがなくてもプロパティをオブジェクトに追加できる場合、プロトタイププロパティの用途は何ですか?
javascript - javascriptで連鎖プロトタイプ継承を使用するのはなぜですか?
オブジェクト構成を使用するのではなく、プロトタイプの継承チェーンを構築するのはなぜですか。チェーンの各ステップのプロトタイプを調べると、コストがかかります。
ダミーのコード例を次に示します。
pd
プロパティ記述子は地獄のように冗長であるため、使用します。
o2.foo
o1.foo
3つではなく2つのプロトタイプチェーンしか上がらないため、より高速です。
プロトタイプ チェーンをたどるとコストがかかるのに、なぜオブジェクト構成を使用する代わりにプロトタイプ チェーンを構築するのでしょうか?
別のより良い例は次のとおりです。
効率のためにプロトタイプ オブジェクトをマージするコードは見当たりません。連鎖プロトタイプを構築するコードをたくさん目にします。なぜ後者がより人気があるのですか?
考えられる唯一の理由はObject.isPrototypeOf
、チェーン内の個々のプロトタイプをテストするために を使用することです。
構成よりisPrototypeOf
も継承を使用することには明らかな利点がありますか?