問題タブ [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 - defineProperty get と value を一緒に使用する
私が使用get
する場合defineProperty
そして、私はそれを次のように呼び出すことができます: document.body.parent
、それから動作します。
と使うvalue
とdefineProperty
次のように呼び出すことができます:document.getElementsByName("newtag").parent(2)
は、newtag の親ノードの親ノードを見つけることを意味します。
しかし、私がそれらをまとめると、それは言うUncaught TypeError: Invalid property. A property cannot both have accessors and be writable or have a value
.
両方の方法で呼び出すことができるようにするにはどうすればよい.parent
です.parent(n)
か?
jQuery なし
javascript - javascript Object.defineProperty の使用方法
メソッドの使用方法を調べましたObject.defineProperty
が、適切なものは見つかりませんでした。
誰かが私にこのコードのスニペットをくれました:
しかし、私はそれを理解していません。主に、get
私が得ることができないものです(しゃれが意図されています)。それはどのように機能しますか?
javascript - Object.defineProperty によって作成されたオブジェクト プロパティをループする方法
プログラムに次のオブジェクトがあります
プロパティ名を次のように出力します
これは正常に動作しますが、他のプロパティは私がそう宣言しています
ここでフィドルを印刷しないでください。
今、私はこのコードを入れて、それらが定義されていることを確認します
これは4
、まさに私が期待するものを私に与えます。
で作成されたオブジェクトのプロパティをループするにはどうすればよいObject.defineProperty
ですか?
私のコードに関する他のコメントやヘルプも大歓迎です。
javascript - JavaScript: 配列の .length で defineProperty アクセサーを使用しますか?
サイズの変更を通知できるように、 (主に学術的な理由で) 配列のlength
usingにアクセサーを設定できるようにしたいと考えています。Object.defineProperty()
私は ES6 オブジェクト監視と watch.js を認識していますが、V8/Chrome のみの場合でも、可能であれば追加のライブラリを使用せずに ES5 でこれを実行したいと考えています。
サンプル配列:
悲しいかな、Chrome はそのままでは長さを設定できません。
そして、それは機能しません:
で失敗する'TypeError: Cannot redefine property: length'
ご覧のとおり、そうconfigurable
ですfalse
-したがって、失敗は理解できます。ただし、MDN によれば、可能であるはずです。
defineProperty
配列のlength
プロパティを操作するにはどうすればよいですか? これは機能するはずですか?
javascript - Javascript: プロトタイプ x defineProperty x その他
Array のような JS コア オブジェクト用の小さいながらも便利な追加メソッドがいくつかあります。
Array.prototype.indexOfObject(プロパティ、値)
このメソッドは、(オブジェクトの)配列内のオブジェクトのインデックスを返します。ここで、プロパティ==値であり、シンプルで生産的です。
ただし、配列を列挙すると、メソッドが表示されるため、毎回次のようにする必要があります。
私が知っているように、defineProperty は列挙不可能なメソッドを作成するので、すべてのブラウザがそれを受け入れると問題が解決します。ところで、defineProperty を使用することはすでに安全ですか? IE9はうまく動作しますか?他のブラウザ?これを行う3番目の方法はありますか?
javascript - プログラムによる入力値の変更でアクションをトリガーする
私の目的は、入力値を監視し、その値がプログラムによって変更されたときにハンドラーをトリガーすることです。最新のブラウザでのみ必要です。
を使用して多くの組み合わせを試しdefineProperty
ましたが、これが私の最新の反復です。
value
これは私が期待しているように見えますが、既存の値プロパティをオーバーライドし、 (属性とプロパティ)の二重ステータスで遊んでいるので、ハックのように感じます。またchange
、変更されたプロパティが気に入らないと思われるイベントを中断します。
私の他の試み:
- setTimeout/setInterval ループですが、これもクリーンではありません
- さまざまな
watch
ポリフィルobserve
がありますが、入力値プロパティで壊れます
同じ結果を達成するための適切な方法は何でしょうか?
ライブデモ: http://jsfiddle.net/L7Emx/4/
[編集] 明確にするために: 私のコードは、他のアプリケーションが更新をプッシュできる入力要素を監視しています (たとえば、ajax 呼び出しの結果として、または他のフィールドの変更の結果として)。他のアプリケーションが更新をプッシュする方法を制御することはできません。私は単なるオブザーバーです。
[編集 2] 「最新のブラウザー」の意味を明確にするために、IE 11 および Chrome 30 で動作するソリューションに非常に満足しています。
[更新]受け入れられた回答に基づいてデモを更新: http://jsfiddle.net/L7Emx/10/
@mohit-jain が提案する秘訣は、ユーザー インタラクション用に 2 番目の入力を追加することです。