問題タブ [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 に答える
2742 参照

javascript - Object.defineProperty() vs Object.prototype.property vs Object.property いつ何を使う?

Object.defineProperty()、Object.prototype.property、および Object.property を使用する場合の適切な使用例を教えてください。

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

javascript - Object.defineProperties() の自己参照

複数のプロパティをオブジェクトに追加する場合、Object.defineProperties()通常、それらを で追加すると、1 つずつまたはグループで追加するよりもクリーンで読みやすいコードが生成されます。

ただし、プロパティが別のプロパティを参照している場合は、Object.defineProperties()それを処理できません。ダミーの例を考えてみましょう:

2番目のソリューションが常に機能することは明らかです。ただし、最初のものも他のものの省略形のように見え、とにかくプロパティの順次処理を示唆しているため、最初のもの同様に機能すると思われます。

これに関する明示的なドキュメントは見つかりませんでした。

質問は次のとおりです。

  • これは意図的な制限ですか、それともバックグラウンドでの技術的な複雑さですか?
  • それはどこかに文書化されていますか?
  • 実装固有または標準の動作ですか?

編集:明確に答えて、私のコメントも見てください。これは、Object.defineProperties() とは直接関係のない、単純なオブジェクト リテラルの問題です (問題ではなく、むしろ :) です。

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

javascript - js es5 Object.definePropertyで=演算子をオーバーロードする方法

=を使用して JS オブジェクトの演算子をオーバーロードする方法を教えてObject.definePropertyください。

これは、単純なプロパティを定義するための標準的な es5 構文です。
現在は、オーバーロードされた演算子obj.varを持つプロパティです。 しかし、実際に何をすべきかは、それ自体の演算子をオーバーロードすることです。=
=obj

=オブジェクト自体の演算子をオーバーロードする方法は?

(es5で)可能ですか?

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

javascript - elem.dataset で Object.defineProperty を使用しますが、プロパティは引き続き変更可能です

Object.defineProperty を使用して、キャンバス要素のデータセットに変更不可能なプロパティを設定しようとしています。通常のオブジェクトでは、これは正常に機能します。しかし、データセット オブジェクトでそれを実行しようとすると、プロパティはまだ変更可能です。

writable: false を使用しても解決しません。これを解決する方法はありますか、それはバグですか、このように Object.defineProperty を使用することは想定されていませんか?

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

javascript - プロパティタイプに独自の「セット」がある場合、オブジェクトプロパティで「セット」を使用する方法は?

「_position」が Sprite の Point オブジェクト メンバーであり、Number メンバー x と y、および独自の get/set 定義を使用する場合、これが機能するように、より高いレベルの「set」を適用するにはどうすればよいですか (編集: Point の 'set' 関数ではなく、Sprite の 'set' 関数):

現在何が起こっているかというと、「this.position」が「position.get」プロパティに渡され、次に「this.position.set」が Point set 関数に渡されます。独自の get/set を使用してオブジェクトを「設定」しようとすると、最低レベルに落ちるようです。

この動作を変更する方法が必要なように感じますが、私のグーグル検索とスタックオーバーフロー検索では答えが見つかりません。ここでやりたいことを表す適切な用語がある可能性がありますが、それがなければ、質問というフレーズを正しく理解するのに苦労しています。

例: これは近いですが、私の状況ではうまくいきません

編集: Point のソース ファイル、または this.position.set(x,y); の関数は制御しません。保持されています。ただし、実際にポイント セット関数を使用したい他のオブジェクトを壊さないことを証明できれば、呼び出し構文の変更の許可を得ることができるかもしれません。

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

javascript - Angular で Object.defineProperty を使用すると、TypeError: Cannot assign to read only property (property of #) がスローされます

I have an object on my scope, and I want that object to have a few non-enumerable properties, but after setting the en

I have an object on my scope, and I want that object to have a few non-enumerable properties, but after setting the enumerable descriptor to false, whenever I try to change the value, I get: "TypeError: Cannot assign to read only property (property) of #"

... even though I am specifically setting it's writeable and configurable descriptors to true. Why is this happening, and what can I do to fix it? In non-strict mode it doesn't throw an error, it just doesn't do anything. This should work fine according to: MDN ...

code:

if you run the above code snippet it throws: TypeError:


The API currently does not support simultaneous output to multiple independent audio devices. It's most likely the way this will be supported is by creating multiple AudioContexts on different devices; but this isn't specified or implemented by anyone today.

You should be able to access multiple outputs of a more-than-two-channel audio device, though - so you can do this, it will just have to be on a single device (not one device for speakers, and one for headphones).

0 投票する
0 に答える
231 参照

javascript - 「scrollTop」プロパティをオーバーライドし、getter で値に到達する

カスタム スクロールバー スクリプトの場合、デフォルトの scrolltop プロパティをオーバーライドしたいと考えています。今、私はそれを変更するために最初に値に到達する必要があるという問題があります。私が使う

仕事をすること。誰かアイデアや代替案はありますか?

よろしくお願いします、

サイモン