JSの機能マーカーといえば、私はいつもそれが少し奇妙だと感じています。なぜこの属性について話すのですか?それは問題についての質問に由来しました。ウィンドウオブジェクトが実際にあることは誰もが知っています
ブラウザウィンドウのインスタンスはインスタンスであるため、このインスタンスには「プロパティ」と「メソッド」が必要です。
関数を使用すると、名前、年齢などのプロパティを定義し、操作を削除、設定、更新することもできます。
次の質問は次のとおりです。私の人物の名前は動的に変更できるので、この原則に従って、ウィンドウの下で未定義の値を変更できるはずです。そして、私は見ることに非常に興味があります。
結果はまだ考えられます。未定義の値を正常に変更していないのに、なぜこれが起こっているのですか?理由はありません。前の記事で言及されているパッケージタイプではありませんが、結果を尊重する必要があります。これは、基礎となるJSがそのような結果を引き起こすために何かをしたに違いないことを示しています。実際、基礎となるJSでは、デフォルトでは、未定義の属性を未定義にするために、writable = falseフラグが使用されます。以下で詳細に見てみましょう。
1:[writable]機能
属性が書くことができるかどうかになると、C#またはreadonlyキーワードのGet/Set Accessorを考えることができます。以下に、属性の読み取り専用操作を行う方法に間違いなく興味があります。 JSでは、DefinePropertyメソッドを使用するだけです。
上記の例から、3つの楽しいことを見ることができます。
<1>:definePropertyメソッドを使用して、person.nameを読み取り専用フィールドに変換しました。誰かがこれが明らかに方法であると言いたいのですが、どのように機能になることができますか?私の考えでは、機能はそうです
[xxx]モードなので、これはJSの違いです。結局のところ、JSには構文糖がないため、定義特性は、基礎となるパブリックメソッド、つまり定義されたプロパティを通じてのみ定義できます。
<2>:私はこの方法で書くことができるだけでなく、構成可能なものでもあります。それで、これは何のためですか?実際、これは基本的な構成であり、JSエンジンに属性を削除および更新できるかどうかを伝えます。 ConfigureableをFalseに設定すると、P.Nameを削除することはできません。これは無効な操作になるためです。
これらを読んだ後、Undifinedが削除または更新できない理由を理解する必要があると思います。それらはすべて奇妙なマークでできています、あなたはそれがとても面白いと思いますか?
<3>:考える価値のある次の質問は、JSエンジンがどのように行うかです。 C#には属性もあり、この属性はコンパイラによってコンパイルされた後、メタデータに記録されます。次に、リフレクションを使用して、属性に任意の価値を取得できます。たとえば、シリアル化可能なシリアル化クラスは、シリアル化可能なFormatにクラスを反映して読み取る方法を指示します。これは、どのフィールドをシリアル化でき、できないか、非セリア化タグを使用する必要があります。
コードコピーは次のとおりです。
[シリアル化可能]
パブリッククラステスト
{
[非セリア化]
パブリック文字列名;
}
図から、名前がイリノイ州ではnotserializedであることがわかります。 JSには反映がないことがわかっているため、ブレークスルーは自然に定義プロパティ法にあります。残念ながら、このメソッドの根底にあるソースコードがどのようなものかを見ることができないため、名前のフィールドに動的に動的にできないことがわかりません。私たちの理解に基づいて、JSエンジンで発生する可能性のある動作のみを推測できます。