プロパティ記述子は、ES5 の新しい概念であり、その機能はオブジェクトのプロパティにさらなる制御を追加することです。
Object.defineProperty
プロパティ記述子について学ぶには、まず Object.defineProperty メソッドについて説明する必要があります。このメソッドの目的は、オブジェクトの新しいプロパティを定義するか、既存のプロパティを変更することです。そのプロトタイプは次のとおりです:
Object.defineProperty(obj, prop, descriptor)
使用例:
var obj = { };
Object.defineProperty(obj, 'attr', { value: 1 });
上記のコードは、値 1 を持つ attr という名前の属性を obj オブジェクトに追加します。以下と同等:
var obj = { };
obj.attr = 1;
それに比べて、Object.definePropertyの書き方は複雑なようです。ただし、最大の秘密は 3 番目のパラメータにあります。
データ記述子
attr を読み取り専用属性にしたいとすると、書き込み可能なデータ記述子を追加できます:
var obj = { };
Object.defineProperty(obj, 'attr', {
値: 1、
書き込み可能: false
});
console.log(obj.attr);
obj.attr = 2 // 失敗します
console.log(obj.attr);
上記プログラムを実行すると、2回出力されたattrの値が1となっており、属性の書き込みに失敗していることがわかります。ただし、代入ステートメントが例外なく実行に失敗したため、このような結果は少し不可解になります。大規模なコードでそのような問題が発生した場合、トラブルシューティングが困難になることを想像してください。実際、厳密モードでコードを実行するだけで例外が発生します:
'use strict' // strict モードに入ります
var obj = { };
Object.defineProperty(obj, 'attr', {
値: 1、
書き込み可能: false
});
obj.attr = 2 // 例外をスローします
プロパティを列挙できるかどうかを制御できる、別の列挙可能なデータ記述子を見てみましょう。単に属性を定義する場合、この属性は for...in ループで列挙できます:
var obj = { };
obj.attr = 1;
for (obj の変数 i) { console.log(obj[i]) }
enumerable はそれを「隠す」ことができます:
var obj = { };
Object.defineProperty(obj, 'attr', {
値: 1、
列挙可能: false
});
for (obj の変数 i) { console.log(obj[i]) }
上記のコードを実行すると、現時点では attr 属性を列挙できないため、コンソールには何も出力されないことがわかります。
この時点で、属性記述子は変更できるのかという質問があるかもしれません。たとえば、読み取り専用プロパティを再度書き込み可能として定義できますか?実際、これは、プロパティ記述子を変更できるかどうかを制御する、構成可能な別のデータ記述子に依存します。
var obj = { };
Object.defineProperty(obj, 'attr', {
値: 1、
書き込み可能: false、
構成可能: true
});
Object.defineProperty(obj, 'attr', {
書き込み可能: true
});
obj.attr = 2;
上記のコードは、最初に attr を読み取り専用属性として定義し、次にそれを書き込み可能属性として再定義します。したがって、attr への書き込みは成功します。
アクセス記述子
アクセス記述子は、オブジェクト指向の get/set アクセサーに似ています。
var obj = { };
Object.defineProperty(obj, 'attr', {
set: function(val) { this._attr = Math.max(0, val) },
; 取得: function() { return this._attr }
});
obj.attr = -1;
console.log(obj.attr); // 0
上記のコードでは、attr へのアクセスは実際には _attr へのアクセスとなり、set 関数の最小値は 0 に制限されています。
属性記述子の取得
上記はすべて属性記述子の設定に関するものですが、設定された記述子を取得するにはどうすればよいでしょうか? Object.getOwnPropertyDescriptor がその役割を果たします。
var obj = { };
Object.defineProperty(obj, 'attr', {
値: 1、
書き込み可能: false、
構成可能: true
});
var desc = Object.getOwnPropertyDescriptor(obj, 'attr');
console.dir(desc);
オブジェクト コントロール
前述の Object.defineProperty はオブジェクトのプロパティを操作しますが、以下で説明する 3 つのメソッドはオブジェクトを直接操作します。
Object.preventExtensions は、オブジェクトが新しいプロパティを持たないようにすることができます:
var obj = { };
obj.attr = 1;
Object.preventExtensions(obj);
obj.attr2 = 2 //失敗
Object.seal は、オブジェクトに変更可能な属性値のみを持たせることができます (属性が読み取り専用の場合、属性値も変更できません):
var obj = { };
obj.attr = 1;
Object.seal(obj);
obj.attr = 1.5;
obj.attr を削除します。 // 失敗します
Object.freeze により、オブジェクトを完全に変更不能にすることができます:
var obj = { };
obj.attr = 1;
Object.freeze(obj);
obj.attr = 1.5 // 失敗します
obj.attr2 = 2 //失敗
次に、オブジェクトが拡張機能、封印されているか、または凍結されているかどうかをどのようにして知ることができるのかと疑問に思われるかもしれません。答えは、Object.isExtensible、Object.isSealed、Object.isFrozen をそれぞれ呼び出すことです。これら 3 つの関数の使用法は比較的簡単で、面倒なことはありません。
一般に、オブジェクトは属性記述子によってさらに厳密に制御でき、プログラム ロジックの厳密性を強化できます。唯一の欠点は、ES5 が基本的に IE9 でしか実装されていないことです (国内向けであることを考慮すると、IE9 はまだ厳密モードをサポートしていません)。 IE8 シェアはまだ比較的高いですが、このセットは現在モバイル ブラウザーと Node.js でのみ使用できます。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
