私はJavascriptコードで私が説明できない奇妙な状況があります。これまでのところSafari/Macでしか見られていません。Javascriptに本来読み取り専用のオブジェクトがありますか?
私はこのような行があります。
dict[id].sliceHovered = true;
そしては時々、それはエラーがスローされます。
Attempted to assign to readonly property.
また:
dict
はI裸空白のオブジェクトでありますdict={}
で自分を作成してください。id
は外部のデータから提供されるため、何でもかまいません(特定の値が原因であることはまだわかりません)。sliceHovered
は明らかJavascriptがで を築いてきました何かの名前ではありません。- 辞書内のオブジェクトは自分のタイプです。彼らは
sliceHovered
のメンバーを持っていますが、それはJavaScriptの定義されたプロパティではありません(Object.defineProperty()
のように)。ただ普通のプロパティです(コンストラクタはthis.sliceHovered=false
を実行します)。 "use strict"
がオンです。Object.freeze()
,Object.seal()
,およびconst
は、コードベース全体のどこでも使用されていません。
このように、このようなエラーがどのようにスローされる可能性があるかについては非常に困惑しています。インデックス化エラーが発生し、がundefined
またはnull
になると、エラーは異なります。私の唯一のアイデアは、dict
がdict={}
として作成されてからObject
を継承し、おそらくid
がいくつかの継承プロパティにマップされているということです。しかし、dict[id]
から返されたオブジェクトは、それ自体が読み取り専用でなければならないことを意味します。sliceHovered
は、明らかに既存のJavascriptプロパティの名前ではないからです。
しかし、私はそのような本質的に読み込み専用のJavascriptオブジェクトを考えることはできません。
ここで何が間違っているのでしょうか?
'id = '__proto __''のときはどうなりますか?私が正しいとすれば、あなたはそれに何かを割り当てることができないので、それは読まれるだけのものです。しかし、クロムはその場合にエラーを投げず、Safariの最近のバージョンにアクセスすることはできません。 –