3

長さプロパティのプロパティ記述子オブジェクトは、configurable: true、writable:true、enymerable:true を示しますが、読み取り専用のように動作します。

読み取り専用機能は PDO (プロパティ記述子オブジェクト) によってのみ実装できることを知っていました。

誰かが手がかりを与えることができますか? これはどのように読み取り専用ですか?

var nodeList = document.getElementsByName('demo');

nodeList.length; //3
nodeList.length = 6;
nodeList.length; //3

Object.getOwnPropertyDescriptor(nodeList,'length')
Object
configurable: true
enumerable: true
value: 3
writable: true
__proto__: Object
4

2 に答える 2

4

lengthhttp://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-536297177に従って、読み取り専用です。

確かにその表示は誤解を招きますが、それはホスト オブジェクトであるためであり、慣れ親しんだネイティブ オブジェクトのように動作する必要はありません。ただし、特にこのような明白なケースでは、表示が可能な限り動作に一致する必要があるため、バグレポートの価値があります。

于 2013-01-31T14:20:20.303 に答える
1

DOM 仕様では、length読み取り専用として定義されています。

interface NodeList {
  getter Node? item(unsigned long index);
  readonly attribute unsigned long length;
};

getOwnPropertyDescriptor書き込み可能であると言うべきではないように思われるかもしれません。ただし、NodeListインスタンスはホスト オブジェクトです

ECMAScript の実行環境を完成させるためにホスト環境によって提供されるオブジェクト

したがって、彼らは特別な行動をとることができます。実際、これはECMAScriptによって強制されます:

プロパティがデータプロパティとして記述されていて、時間の経過とともに異なる値を返す可能性がある場合、値を変更するメカニズムが他の内部メソッド。

getElementsByNameライブ コレクションを返すため、length変更される可能性があるため、 [[Writable]] または [Configurable]] は である必要がありますtrue。実装では両方を選択します。

于 2015-03-26T17:26:30.673 に答える