JavaScriptでは、オブジェクトは「基本的な値、オブジェクト、または関数を含むことができるプロパティを含む順序付けられていない属性のコレクション」として定義されています。レイマンの用語では、値がデータまたは関数になる可能性のある名前値ペアのセットとしてオブジェクトを理解できます。
通常、カスタムオブジェクトを作成するには2つの方法があります。 1つ目は、オブジェクトのインスタンスを作成し、次のようなプロパティとメソッドを追加することです。
var person = new object(); person.name = "scott"; person.age = 24; person.sayname = function(){alert(person.name); }2番目の方法は、オブジェクトリテラルメソッドです。一般に、この方法を使用してオブジェクトを作成することをお勧めします。
var person = {name: "scott"、age:24、sayname:function(){alert(this.name); }}属性タイプ
JavaScriptで定義されている2つの異なるプロパティがあります。データプロパティとアクセサのプロパティです。データ属性は通常、データ値を保存するために使用されますが、アクセサア属性は一般にGET/SET操作を実行し、データ値を直接保存することはできません。 ES5では、プロパティのさまざまな機能を記述する属性を定義します。 JavaScriptでは、この機能に直接アクセスできないため、[[列挙]]などの2つのペアの正方形のブラケットに入れます。
•データプロパティ
データ属性は主にその動作を説明しています。
1。[[[構成]]:デフォルトはtrueです。属性を削除して属性を再定義できるかどうか、属性特性を変更できるかどうか、または属性をアクセサア属性に変更できるかどうかを示します。
2。[[列挙可能]]:デフォルトはtrueです。属性をfor-inループから返すことができるかどうかを示します。
3。[[writable]]:デフォルトは真です。属性の値を変更できるかどうかを示します。
4。[[値]]:デフォルト値は未定義です。属性を含むデータ値を表します。属性の値の読み取り値は、この位置から実行されます。
上記のプロパティの場合、個人オブジェクトで直接定義されているプロパティの場合、[[configurable]]、[[eNumerable]]、および[[writable]]プロパティはデフォルトでTrueに設定され、[[値]]プロパティは特定の値に設定されます。プロパティのデフォルトプロパティを変更する場合は、ES5が提供するObject.defineProperty()メソッドを使用できます。このメソッドは、プロパティが配置されているオブジェクト、プロパティの名前、および記述子オブジェクトの3つのパラメーターを受信します。記述子オブジェクトには、上記の4つの特性のうち1つ以上のみを含めることができます。例は次のとおりです。
var person = {name: "scott"} object.defineProperty(person、 "name"、{writable:false;})console.log(person.name); // "scott" person.name = "evan"; console.log(person.name); //「スコット」Person Object name属性の書き込み可能なプロパティをfalseに設定します。この属性の値は変更されていないため、この属性のコピー操作は直接無視されます。
var person = {name: "scott"} object.defineProperty(person、 "name"、{configurable:false;})console.log(person.name); // "Scott" delete person.name; console.log(person.name); //「スコット」名前属性の構成可能なプロパティ値がfalseに設定されている場合、属性をオブジェクトから削除できないことを意味します。ただし、プロパティが不足していると定義されている場合、構成可能に戻すことはできないことに注意する必要があります。現時点では、手紙以外の他の機能を変更すると、たとえばエラーが発生します。
var person = {name: "scott"} object.defineProperty(person、 "name"、{configurable:false;})object.defineProperty(iners、 "name"、{configurable:true; //エラーはここにスローされます})つまり、構成可能な機能をFalseに変更した後、他の機能を変更する際に制限があります。
•アクセサーのプロパティ
Accessor属性にはデータ値が含まれていません。ゲッターとセッターの機能が含まれています。アクセサー属性が読み取られると、ゲッター関数が呼び出され、有効な値が返されます。 Accessor属性が記述されると、セッター関数が呼び出され、新しい値が渡され、セッター関数はデータの処理に責任があります。このプロパティには4つの特性があります。
1。[[[構成]]:デフォルトはtrueです。属性を削除して属性を再定義できるかどうか、属性特性を変更できるかどうか、または属性をアクセサア属性に変更できるかどうかを示します。
2。[[列挙可能]]:デフォルトはtrueです。属性をfor-inループから返すことができるかどうかを示します。
3。
4。[[set]]:属性を作成するときに呼び出される関数、デフォルトは未定義です。
アクセターのプロパティは直接定義することはできません。それらはObject.defineProperty()関数を介して定義する必要があります。
var person = {_name: "scott"、_age:24、_tel:86247}; //名前属性は読み取り専用object.defineProperty(person、 "name"、{get:function(){return this._name;}}); // age属性はwriteのみのobject.defineProperty(person、 "age"、{set:function(p){this._age = p;}}); // Tel属性は読み取り専用object.defineProperty(person、 "tel"、{get:function(){return this._tel;}、set:function(p){this._tel = p;}}); console.log(person.name); // "scott" person.name = "evan"; console.log(person.name); //「スコット」、名前属性の変更は無効です。console.log(person.age); //未定義、未読の属性person.age = 25; console.log(person._age); // 25、console.log(person.tel); // "86247"、読み取り可能な属性person.tel = "13975"; console.log(person.tel); // "13975"、変更を行うことができます属性の前のアンダースコアは、オブジェクトメソッドを介してのみアクセスできる属性を示します。 person.nameを使用すると、実際に名前属性のゲッター関数を呼び出し、vanue.nameに値を割り当てるとき、属性のセッター関数を呼び出して、属性とアクセサアの関係が非常に明確になります。
複数の属性を定義します
実際、ES5は、オブジェクトの複数のプロパティ、つまりobject.defineProperties()を定義する方法を提供します。この関数は、プロパティが配置されているオブジェクトと、変更する必要がある属性とその記述子オブジェクトで構成されるオブジェクトの2つのパラメーターを受信します。たとえば、上記の例を変更して、次のように複数のプロパティを一度に定義します。
var person = {_name: "scott"、_age:24、_tel:86247}; object.defineProperties(person、{name:{get:function(){return this._name;}}、age:{set:function(p){this._age = p;}}、tel:{get:function(){return this._tel;}、set:function(p){this_tel = p;}});プロパティを読み取ります
ES5は、Object.getownPropertyDescripter()メソッドを提供して、特定のプロパティの記述子を取得します。このメソッドは、属性が存在するオブジェクトと、その記述子の属性名が読み取られる2つのパラメーターを受信します。結果はオブジェクトを返します。アクセサ属性の場合、返されたオブジェクトには、構成可能、列挙可能、取得、セットが含まれます。それがデータ属性の場合、返されたオブジェクトのプロパティには、構成可能、列挙可能、書き込み可能、価値が含まれます。上記の例では、以下を使用してください。
var person = {_name: "scott"、_age:24、_tel:86247}; object.defineProperties(person、{name:{get:function(){return this._name;}}、age:{set:function(p){this._age = p;}}、tel:{get:function(){return this._tel;}、set:function(p){this_tel = p;}}); var describer = object.getownPropertydescripter(iners、 "tel"); console.log(descripter.value); //未定義のconsole.log(descripter.NeNumerable); // false Console.log(typeof descripterer.get); //"関数"上記のコードは、人オブジェクトのTELプロパティを取得します。それはアクセサのプロパティであるため、その値は未定義であり、列挙可能は偽であり、GETはゲッター関数へのポインターです。
上記の記事では、JavaScriptのデータ属性とアクセサア属性が私があなたと共有したすべてのコンテンツについて簡単に説明します。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。