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

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

javascript - Object.defineProperty と戻り値

Object.defineProperty メソッドを使用していくつかのゲッターとセッターを定義する JavaScript オブジェクトをいじっています。

プロパティ (id) の 1 つについては、getter のみが必要です。もともとタイプミスがあり、 の値を返していまし_usernameたが、上記が機能しないことにすぐに気付きました。好奇心のために、なぜ期待どおりに機能しなかったのかを理解しようとしています。私が次のことをした場合:

undefinedの代わりに最後のステートメントが警告しbobます。何故ですか?そして、別のプロパティを返すようにする方法はありますか?

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

javascript - カスタム属性を HTMLElement に追加するにはどうすればよいですか?要素の新しいインスタンスごとにデフォルトで空のオブジェクトになりますか?

のプロトタイプに新しいプロパティを追加し、HTMLElementそのデフォルト値を ' {}' (空のオブジェクト) にした場合:

今、私は新しいものを作成しますdiv(これもですHTMLElement):

customObjectof にプロパティを割り当てますe

警告すると、目的の値が表示されます。

ここで、新しい別のdiv要素を作成します。

これでプロパティdが空になるはずですよね?customObject

ただし、警告すると:

この予期しない結果が得られます。

どうして?新しい要素を作成するとき、HTMLElement.prototype の「空白」のインスタンスが必要ではありませんか?

( jsfiddle: http://jsfiddle.net/5pgr38mb/ )

編集:ディープ クローニング (cloneNode(true)) で動作するソリューション 探しています。意味 - カスタム オブジェクトが要素またはその子のいずれかにプロパティを持っている場合、その要素または子は複製されたインスタンスでその値を保持します (これは「ネイティブ」HTMLElement 属性の通常の動作です)。

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

javascript - ゲッターとセッターでオブジェクトを作成するコンストラクター関数を定義する方法は?

いくつかのプロパティをカプセル化するオブジェクト定義の作成に取り組んでいます。このオブジェクトには 4 つの要件があります。

  • いつでも複数のインスタンスを作成できます
  • オブジェクトで定義されたプロパティのみを設定/取得できます
  • オブジェクトは文字列化可能でなければなりません (プロパティと関連する値のみ)
  • 文字列化されたバージョンは解析可能で、オブジェクトを返す必要があります

これは私がこれまでに持っているものの簡略化されたバージョンです:

これが、ゲッターとセッターを使用してオブジェクトを定義するための最も簡単な方法であるかどうかはわかりません。を使用する代わりになるものはありObject.definePropertyますか、それともこれが新しい基準ですか?

このアプローチでは、独自のstringifyメソッド (以下を参照) を作成する必要もあります。これは、呼び出しJSON.stringifyによって関数が取り除かれ、これによって が取り除かれるためmakeです。自分で書くことに代わるものはありますか?どうにかしてオブジェクト定義を変更できますか?

Carさらに、 JSON オブジェクトから aをインスタンス化できるようにするには、オプションのコンストラクター引数を指定する必要があります。

繰り返しますが、これはすべての要件を満たす最善のアプローチですか?

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

javascript - defineProperty で定義されたプロパティの設定を解除し、新しい値を設定します

でオブジェクト プロパティを定義しますObject.defineProperty。しかし、どうすれば設定を解除できますか?

delete foo.bar(プロパティはどこにありますか)で設定を解除しようとしましたbarが、機能しないようです:

出力は次のとおりです。

次の出力が期待されていました。

アイデアは、最初の後にgetプロパティを値に置き換えたいということです。

これはどのように行うことができますか?

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

javascript - オブジェクトの値の Javascript セッター

オブジェクト「myObject.user」の値の変更中にトリガーされる「set」関数を作成しました。したがって、値を変更すると、アラートが表示されます。しかし、オブジェクト「myObject.newuser[0].id」内の値を更新しているとき、セットは呼び出されません。内部値が変更された場合にグローバル セットが機能するようにコードを変更する方法。つまり、このコードでは 2 つのアラートを受け取る必要があります。

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

javascript - Number.prototype にプロパティを適用せずに Object.prototype にプロパティを追加するにはどうすればよいですか?

私の目標はmaster_script.jsを作成することです。主に開発で使用するハンドラファイル。

このファイルのサブセクションは、基本オブジェクトのプロトタイプのカスタマイズ専用です。

  1. 番号
  2. 配列
  3. 物体
  4. 日にち
  5. 関数
  6. ブール値

だから私は自分のコードブロックを書いている...

正常に動作します!

  • コンソールで展開するn.__proto__と、プロパティが表示され、getter functionです。len: (...)get len: function (){
  • コンソールに入力n.すると、プロパティ|メソッドのリストにはっきりと表示されます。

o変数に対して同じ設定を構成すると、問題が発生します。

最初に気付くのは、コンソールn.にoro.を入力すると、プロパティ|メソッドのポップアップ リストにプロパティへの参照が含まれなくなっていることですが、完全な拡張子を入力するか、または orの目的の結果が得られると...lenn.leno.len32

したがって、コードが正当であることはわかっていますが、7 つの基本オブジェクトのそれぞれに約 40 の異なるプロパティとメソッドがあるため、コンソールポップアップが必要です...

そこで、問題を特定するためのテスト ブロックを作成しました。

.__proto__コンソールで を展開した直後に、o3つすべてに、最初にオブジェクトのみに割り当てようとしたプロパティが与えられていることに気付きましたnediso

それから私はそれをクラックしました:Number.prototypeそれ自体はオブジェクトです。したがって、それはdisからプロパティを継承しますObject.prototype

fromによって継承されずdisに、オブジェクトのみにプロパティを追加するにはどうすればよいですか?onObject.prototype