問題タブ [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 投票する
2 に答える
1609 参照

javascript - defineProperty get と value を一緒に使用する

私が使用getする場合defineProperty

そして、私はそれを次のように呼び出すことができます: document.body.parent、それから動作します。

と使うvaluedefineProperty

次のように呼び出すことができます: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 なし

0 投票する
10 に答える
119360 参照

javascript - javascript Object.defineProperty の使用方法

メソッドの使用方法を調べましたObject.definePropertyが、適切なものは見つかりませんでした。

誰かが私にこのコードのスニペットをくれました:

しかし、私はそれを理解していません。主に、get私が得ることができないものです(しゃれが意図されています)。それはどのように機能しますか?

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

javascript - Object.defineProperty によって作成されたオブジェクト プロパティをループする方法

プログラムに次のオブジェクトがあります

プロパティ名を次のように出力します

これは正常に動作しますが、他のプロパティは私がそう宣言しています

ここでフィドルを印刷しないでください。

今、私はこのコードを入れて、それらが定義されていることを確認します

これは4、まさに私が期待するものを私に与えます。

で作成されたオブジェクトのプロパティをループするにはどうすればよいObject.definePropertyですか?

私のコードに関する他のコメントやヘルプも大歓迎です。

0 投票する
5 に答える
4243 参照

javascript - JavaScript: 配列の .length で defineProperty アクセサーを使用しますか?

サイズの変更を通知できるように、 (主に学術的な理由で) 配列のlengthusingにアクセサーを設定できるようにしたいと考えています。Object.defineProperty()

私は ES6 オブジェクト監視と watch.js を認識していますが、V8/Chrome のみの場合でも、可能であれば追加のライブラリを使用せずに ES5 でこれを実行したいと考えています。

サンプル配列:

悲しいかな、Chrome はそのままでは長さを設定できません。

そして、それは機能しません:

で失敗する'TypeError: Cannot redefine property: length'

ご覧のとおり、そうconfigurableですfalse-したがって、失敗は理解できます。ただし、MDN によれば、可能であるはずです。

defineProperty配列のlengthプロパティを操作するにはどうすればよいですか? これは機能するはずですか?

0 投票する
3 に答える
186 参照

javascript - Javascript: プロトタイプ x defineProperty x その他

Array のような JS コア オブジェクト用の小さいながらも便利な追加メソッドがいくつかあります。

Array.prototype.indexOfObject(プロパティ、値)

このメソッドは、(オブジェクトの)配列内のオブジェクトのインデックスを返します。ここで、プロパティ==値であり、シンプルで生産的です。

ただし、配列を列挙すると、メソッドが表示されるため、毎回次のようにする必要があります。

私が知っているように、defineProperty は列挙不可能なメソッドを作成するので、すべてのブラウザがそれを受け入れると問題が解決します。ところで、defineProperty を使用することはすでに安全ですか? IE9はうまく動作しますか?他のブラウザ?これを行う3番目の方法はありますか?

0 投票する
7 に答える
16538 参照

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 番目の入力を追加することです。