概要Object.freeze(obj) はオブジェクトをフリーズすることができます。凍結されたオブジェクトは変更できなくなります。 オブジェクトが凍結されている場合、そのオブジェクトに新しいプロパティを追加したり、既存のプロパティを削除したり、既存のプロパティの列挙可能性、構成可能性、書き込み可能性を変更したり、既存のプロパティの値を変更したりすることはできません。 また、オブジェクトをフリーズした後は、オブジェクトのプロトタイプを変更することはできません。 freeze() は渡された引数と同じオブジェクトを返します。 JavaScriptデモ: Object.freeze() 定数オブジェクト = { プロップ: 42 } オブジェクトをフリーズする(obj) obj.prop = 33 // 厳密モードではエラーが発生します。 コンソールログ(obj.prop) // 42 例1) オブジェクトをフリーズするvar obj = { プロパティ: 関数() {}, foo:'バー' } // パラメータとして渡されたオブジェクトと返されたオブジェクトは両方とも凍結されるため、返されたオブジェクトを保存する必要はありません(両方のオブジェクトが等しいため) var o = Object.freeze(obj) o === obj // 真 // これからの変更は効果がありません obj.foo = 'he' // 何もしません Obj.hxx = 'he' // このプロパティを追加しないでください // Object.defineProperty 経由でプロパティを変更してみてください // 次の両方のステートメントは例外をスローします Object.defineProperty(obj,'foo',{value:'yy'}) Object.defineProperty(obj,'sex',{value:'女'}) // プロトタイプも変更できません // 次の 2 つのステートメントは例外をスローします Object.setPrototypeOf(obj,{x:20}) オブジェクト__prop__ = {x:20} 2) 配列をフリーズするa = [0]とする Object.freeze(a) // 配列は変更できなくなりました a[0] = 1 // 失敗 a.push(2) // 失敗 凍結されたオブジェクトは不変です。しかし、いつもこうなるわけではありません。以下は、凍結されたオブジェクトが定数オブジェクトではないことを示しています(浅い凍結) 3) 浅い凍結obj = { 内部: {} } オブジェクトをフリーズする(obj) obj.internal.a = '彼' console.log(obj.internal.a) // 彼 オブジェクトを不変にするには、オブジェクト型のすべてのプロパティを再帰的に凍結する必要があります(ディープフリーズ) 4) ディープフリーズdeepFreeze = (obj) => { var propNames = Object.getOwnPropertyNames(obj); propNames.forEach(関数 (名前) { var prop = obj[名前]; if (typeof prop == 'object' && prop !== null) { deepFreeze(プロパティ); } }); オブジェクトをフリーズします。 } deepFreeze1 = (obj) => { var prop、propName オブジェクトをフリーズする(obj) (propName in obj) の場合 { prop = obj[propName] if (!obj.hasOwnProperty(propName) || !(typeof prop === "object") || Object.isFrozen(prop)) { // プロトタイプ チェーンと凍結されたオブジェクトのプロパティをスキップします。 続く } deepFreeze1(プロップ) } } ディープフリーズを使用するのは、通常、プロパティが必要なのに、それが空であるか、最初は存在しない場合に、初期値を設定するだけです。 タイトル: 「フロアセールス」、 価値: ""、 オプション: [], 存在の意味巨大な配列またはオブジェクトがあり、データが変更されないことが確実な場合は、Object.freeze() を使用するとパフォーマンスが大幅に向上します。 Object.freeze() は値を固定しますが、変数への参照を置き換えることは可能です。 新しいビュー({ データ: { // Vue はリスト内のオブジェクトにゲッターとセッターをバインドしません list: Object.freeze([ { 値: 1 }, { 値: 2 } ]) }, マウントされた(){ // インターフェースは応答しません this.list[0].value = 100; // 次の2つのメソッドは this.list = [ に応答します。 { 値: 100 }, { 値: 200 } ]; this.list = Object.freeze([ { 値: 100 }, { 値: 200 } ]); } }) 以上がJS ObjectコンストラクタのObject.freezeの詳しい内容です。JS Object.freezeの詳細については、123WORDPRESS.COMの他の関連記事もご覧ください。 以下もご興味があるかもしれません:
|
<<: Java+Tomcat 環境の展開とインストールのプロセス図
MySQL 5.7.19のインストールを例に挙げると、まずダウンロードしますもちろん、最初に行うこと...
私は W3school のチュートリアルに従いました。チュートリアルはとても良いと思います。各セクシ...
目次1.setInterval() 2.タイムアウトを設定する() 1.setInterval()指...
この記事では、ネストされたタブ機能を実装するためのjQueryの具体的なコードを参考までに紹介します...
いつインストールするかprotoc コマンドを使用しても Protoc が見つからない場合は、インス...
この記事では、画像ウォーターフォールフローを実現するためのJSの具体的なコードを参考までに共有します...
<input> はユーザー情報を収集するために使用され、終了ステートメントはありません。...
この記事では、MySQL ビューの原理と使用法についてまとめます。ご参考までに、詳細は以下の通りです...
目次リポジトリソースを変更する起動するvue-devtoolsを置き換える予防ボーダーレスウィンドウ...
前回の記事では、MySQL ステートメントの実行時間をチェックする 2 つの方法を紹介しました。今日...
以下は、B+ ツリーのデータ構造と実験結果からの推測に基づいた私の判断です。間違いがあればご指摘くだ...
最近、JS の正規表現マッチングの落とし穴を発見したのですが、その時はあまりにも奇妙だったので、何か...
目次前に書いてビジネスコードは環境変数を使用するwebpack.DefinePlugin プラグイン...
発掘紹介: Dig は、Unix ライクなコマンドライン モードで NS レコード、A レコード、M...
Ubuntu ではデフォルトで root ログインが許可されていないため、初期の root アカウン...