問題タブ [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 - アクセサー プロパティのエラー: 構成不可能なプロパティ 'status' を再定義できません
オブジェクトを定義し、そのアクセサ プロパティを作成しようとしています。
HTML:
JavaScript:
しかし、私がそれを使用すると、質問のタイトルに記載されているエラーがスローされます:
スロー:
TypeError: 構成不可能なプロパティ 'mode' を再定義できません
ここで何が問題なのですか?
javascript - Object.defineProperty 呼び出しを元に戻すにはどうすればよいですか?
defineProperty
呼び出しを元に戻すために、ES5 にはどのようなオプションがありますか?
ばかげた提案はありませんObject.defineProperty = function() { }
。
以下Object.defineProperty(Object.prototype, 'should', {})
動作しません
とObject.defineProperty(Object.prototype, 'should', { value: undefined })
Uncaught TypeError: Cannot redefine property: defineProperty
V8 でaをスローします。
同じエラーをスローします
delete Object.prototype.should
また、動作しません
javascript - JavaScript の getter/setter をネイティブの構成不可能なプロパティに追加する
オブジェクトのプロパティに加えられた変更を傍受するために特別なゲッター/セッターを使用していますが、現在、通常のユーザー定義のプロパティに対してうまく機能しています。ただし、またはのような組み込みプロパティに同じアイデアを採用できれば幸いですが、これらは残念ながら構成不可として定義されているため、ゲッター/セッターを使用して再定義しようとするとエラーが発生します。HTMLInputElement.value
Array.length
内部操作を壊さずにこれらを強制的に再定義するためにできる(信頼できる)ハックがあるかどうか疑問に思っています。
そうでない場合は、ネイティブ プロパティに単純にマップして代わりに使用する、これらすべての代替プロパティを定義することを余儀なくされる可能性がありますが、それは理想的ではありません。
javascript - 構成不可能なプロパティ記述子の[列挙可能性と]書き込み可能性を設定できるのはなぜですか?
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/definePropertyの状態:
構成可能:このプロパティ記述子のタイプが変更される可能性があり、プロパティが対応するオブジェクトから削除される可能性がある場合にのみtrue。デフォルトは
false
。
だから、私は
x.a = false
これで、などで遊ぶことができますfor(i in x)
。ただし、記述子は構成できないはずですが、実行できます。
逆に、それらを再びtrueに設定するか、アクセサー記述子を定義しようとすると、エラーが発生するようになりました。正確には:Object.defineProperty: invalid modification of non-configurable property
。
記述子が構成不可能であると言われているのに、なぜ記述子を「ダウングレード」できるのですか?
javascript - Object.create を使用して作成された JavaScript プロパティの get/set メソッドへのアクセス
私が望むのは、JavaScript プロパティをラップして get/set の動作を変更できる機能です。
値であるプロパティの場合、次のことができます。
しかし、myPropertyが既に getter/setter を持っている場合はどうなるでしょうか?
myProperty匿名セッターを検出して、 notifyOfChange で呼び出せるようにする方法はありますか?
注: notifyOfChange を任意のオブジェクトで機能させたいので、myPropertyセッターに名前付き関数を使用するだけでは機能しません。
javascript - javascript defineProperty で属性を列挙不可にする
defineProperty を使用して、属性が for...in サイクルに表示されないようにしようとしていますが、機能しません。このコードは正しいですか?
javascript - すべてのブラウザーの Object.defineProperty?
以下に示すように Object.defineProperty について尋ねます。
次のように使用されます。
私がこれまでに見たものに基づいて、運がなかったes5-shimを使用しようとしたため、クロス ブラウザー ソリューションがないように見えますが、確認したいと思います。この投稿への参照も見つけましたが、私のテストは IE 7 & 8 でも失敗します。
数か月前に S/O のどこかで関連する質問を調べたのを覚えています。誰かが回答でこれに対する解決策を書いているのを見たと思います。ゲッター/セッターの一般的な回避策もいただければ幸いです。アイデアは、メソッドを介してパラメーターの変更を渡すことなく、オブジェクトのゲッター セッターに相当するものを必要とするということです。IE6 は必要ありませんが、IE7+ ff 3.6+ などの範囲のブラウザーをサポートしたいと考えています。
以下の QUnit テスト: ( jsFiddles )
(これらは、IE 7 と 8 を除く、私のマシンのすべてのブラウザーで通過します。
defineProperty の直接使用、シムなし:
http://jsfiddle.net/uSYFE/
ES5シムを使用してフィドルします。私がする必要があるのはそれを含めることだけだと思いますか? :
http://jsfiddle.net/hyperthalamus/ntwDy/
IE推奨ソリューションを使用してフィドル:
http://jsfiddle.net/hyperthalamus/xfvz3/
typescript - TypeScript でプロパティをカスタマイズする方法
TypeScript に次のようなプロパティ定義を発行させるにはどうすればよいですか。
javascript - 要素の defineProperty は iOS6 で壊れていますか?
JavaScript の defineProperty と __defineSetter は、iOS6 の要素に対して機能しません。他のすべてのブラウザーおよび以前のバージョンの iOS で適切に動作します。これについて詳しく知っている人はいますか?
フィドルは次のとおりです。
javascript - 読み取り専用で構成不可能なプロパティを削除する方法はありますか?
答えは「いいえ」だと思いますが、それは、含まれているオブジェクトへのすべての参照を削除し、ガベージコレクションが最終的に含まれているオブジェクトのすべてのコンテンツを削除できるようにすることです。
ライブの例(コンソールでログ出力を表示する(ChromeでF12キーを押すなど))
コード: