問題タブ [defineproperty]
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 - Object.defineProperty と戻り値
Object.defineProperty メソッドを使用していくつかのゲッターとセッターを定義する JavaScript オブジェクトをいじっています。
プロパティ (id) の 1 つについては、getter のみが必要です。もともとタイプミスがあり、 の値を返していまし_username
たが、上記が機能しないことにすぐに気付きました。好奇心のために、なぜ期待どおりに機能しなかったのかを理解しようとしています。私が次のことをした場合:
undefined
の代わりに最後のステートメントが警告しbob
ます。何故ですか?そして、別のプロパティを返すようにする方法はありますか?
javascript - カスタム属性を HTMLElement に追加するにはどうすればよいですか?要素の新しいインスタンスごとにデフォルトで空のオブジェクトになりますか?
のプロトタイプに新しいプロパティを追加し、HTMLElement
そのデフォルト値を ' {}
' (空のオブジェクト) にした場合:
今、私は新しいものを作成しますdiv
(これもですHTMLElement
):
customObject
of にプロパティを割り当てますe
。
警告すると、目的の値が表示されます。
ここで、新しい別のdiv
要素を作成します。
これでプロパティd
が空になるはずですよね?customObject
ただし、警告すると:
この予期しない結果が得られます。
どうして?新しい要素を作成するとき、HTMLElement.prototype の「空白」のインスタンスが必要ではありませんか?
( jsfiddle: http://jsfiddle.net/5pgr38mb/ )
編集:ディープ クローニング (cloneNode(true)) で動作するソリューションを 探しています。意味 - カスタム オブジェクトが要素またはその子のいずれかにプロパティを持っている場合、その要素または子は複製されたインスタンスでその値を保持します (これは「ネイティブ」HTMLElement 属性の通常の動作です)。
javascript - ゲッターとセッターでオブジェクトを作成するコンストラクター関数を定義する方法は?
いくつかのプロパティをカプセル化するオブジェクト定義の作成に取り組んでいます。このオブジェクトには 4 つの要件があります。
- いつでも複数のインスタンスを作成できます
- オブジェクトで定義されたプロパティのみを設定/取得できます
- オブジェクトは文字列化可能でなければなりません (プロパティと関連する値のみ)
- 文字列化されたバージョンは解析可能で、オブジェクトを返す必要があります
これは私がこれまでに持っているものの簡略化されたバージョンです:
これが、ゲッターとセッターを使用してオブジェクトを定義するための最も簡単な方法であるかどうかはわかりません。を使用する代わりになるものはありObject.defineProperty
ますか、それともこれが新しい基準ですか?
このアプローチでは、独自のstringify
メソッド (以下を参照) を作成する必要もあります。これは、呼び出しJSON.stringify
によって関数が取り除かれ、これによって が取り除かれるためmake
です。自分で書くことに代わるものはありますか?どうにかしてオブジェクト定義を変更できますか?
Car
さらに、 JSON オブジェクトから aをインスタンス化できるようにするには、オプションのコンストラクター引数を指定する必要があります。
繰り返しますが、これはすべての要件を満たす最善のアプローチですか?
javascript - defineProperty で定義されたプロパティの設定を解除し、新しい値を設定します
でオブジェクト プロパティを定義しますObject.defineProperty
。しかし、どうすれば設定を解除できますか?
delete foo.bar
(プロパティはどこにありますか)で設定を解除しようとしましたbar
が、機能しないようです:
出力は次のとおりです。
次の出力が期待されていました。
アイデアは、最初の後にget
プロパティを値に置き換えたいということです。
これはどのように行うことができますか?
javascript - オブジェクトの値の Javascript セッター
オブジェクト「myObject.user」の値の変更中にトリガーされる「set」関数を作成しました。したがって、値を変更すると、アラートが表示されます。しかし、オブジェクト「myObject.newuser[0].id」内の値を更新しているとき、セットは呼び出されません。内部値が変更された場合にグローバル セットが機能するようにコードを変更する方法。つまり、このコードでは 2 つのアラートを受け取る必要があります。
javascript - Number.prototype にプロパティを適用せずに Object.prototype にプロパティを追加するにはどうすればよいですか?
私の目標はmaster_script.jsを作成することです。主に開発で使用するハンドラファイル。
このファイルのサブセクションは、基本オブジェクトのプロトタイプのカスタマイズ専用です。
- 弦
- 番号
- 配列
- 物体
- 日にち
- 関数
- ブール値
だから私は自分のコードブロックを書いている...
正常に動作します!
- コンソールで展開する
n.__proto__
と、プロパティが表示され、getter functionです。len: (...)
get len: function (){
- コンソールに入力
n.
すると、プロパティ|メソッドのリストにはっきりと表示されます。
o
変数に対して同じ設定を構成すると、問題が発生します。
最初に気付くのは、コンソールn.
にoro.
を入力すると、プロパティ|メソッドのポップアップ リストにプロパティへの参照が含まれなくなっていることですが、完全な拡張子を入力するか、または orの目的の結果が得られると...len
n.len
o.len
3
2
したがって、コードが正当であることはわかっていますが、7 つの基本オブジェクトのそれぞれに約 40 の異なるプロパティとメソッドがあるため、コンソールポップアップが必要です...
そこで、問題を特定するためのテスト ブロックを作成しました。
.__proto__
のコンソールで を展開した直後に、o
3つすべてに、最初にオブジェクトのみに割り当てようとしたプロパティが与えられていることに気付きましたn
。e
dis
o
それから私はそれをクラックしました:Number.prototype
それ自体はオブジェクトです。したがって、それはdis
からプロパティを継承しますObject.prototype
fromによって継承されずdis
に、オブジェクトのみにプロパティを追加するにはどうすればよいですか?o
n
Object.prototype