ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript オブジェクトのデータ属性とアクセサー属性インスタンスの詳細な説明

Javascript オブジェクトのデータ属性とアクセサー属性インスタンスの詳細な説明

伊谢尔伦
伊谢尔伦オリジナル
2017-05-30 11:40:091718ブラウズ

ES5 のオブジェクトのプロパティは、「データ プロパティ」と「アクセサー プロパティ」の 2 種類に分類できます。

データ属性は通常、データ値を格納するために使用され、set/get 操作に対応し、データ値を直接格納することはできません。

データ属性の特性: 値、書き込み可能、​​列挙可能、構成可能。

説明: 構成可能: true/false、属性を削除によって削除できるかどうか、属性の特性を変更できるかどうか、属性をアクセサー属性として変更できるかどうか、デフォルトは false です。 : true/false、渡せるかどうか for in ループが返す、デフォルトは false

writable: true/false、属性の値を変更できるかどうか、デフォルトは false;属性の値が設定されていますが、デフォルトは未定義です。

アクセサ属性の特性:

set、get、列挙可能、構成可能。 説明: 構成可能: true/false、属性を削除によって削除できるかどうか、属性の特性を変更できるかどうか、属性をアクセサー属性として変更できるかどうか、デフォルトは false です。 : true/false、渡せるかどうか for in ループが戻ります。デフォルトは false です。

set: 関数、属性値を読み取るときに呼び出される関数。 get: 関数、属性値を変更するときに呼び出される関数。 。

オブジェクトにプロパティを追加するか、既存のプロパティのプロパティを変更するには、Object.defineProperty() または Object.defineproperties() メソッドを使用します。

Object.defineProperty(object, propertyname, descriptor):

パラメータの説明: object:追加するか、属性オブジェクトを変更する必要があります。

propertyname: 属性の名前、文字列形式;

descriptor: 属性の説明、データ属性またはアクセサー属性の特性を設定します。

インスタンス分析:

データ属性:

var emp = {
 
name:'tom'
 
};
   
 
Object.defineProperty(emp,'name',{
 
writable:false
 
});
 
emp.name = 'jery';
console.log(emp.name);//输出tom,因为已经设置了writable为false
 
 
Object.defineProperty(emp,'age',{
 
configurable:false,
 
writable:true,
 
value:22
 
});
 
console.log(emp.age);//输出22,因为设置了value为22
 
emp.age = 25;
 
console.log(emp.age);//输出25,设置了writable为true
 
delete emp.age;
 
console.log(emp.age);//输出25,设置了configurable为false,此属性删除不了

アクセサー属性:

var emp ={
 
_name:'tom',
 
_age:20
 
};
 
  
Object.defineProperty(emp,'name',{
 
get:function(){
 
return this._name;
 
}
 
});
 
console.log(emp.name);//输出tom,由get方法返回_name的值
 
emp.name = 'jery';
 
console.log(emp.name);//输出tom,没有set方法,修改不了_name的值
 
   
Object.defineProperty(emp,'age',{
 
configurable:true,
 
get:function(){
 
 return this._age;
 
}
 
set:function(age){
 
this._age = age;
 
}
 
});
 
emp.age = 25;
console.log(emp.age)//输出25,emp.age=25是使用set方法将25赋值给_age,emp.age是使用get方法将_age的读取出来 
delete emp.age; 
console.log(emp.age);//输出undefined,configurable为true,可以使用delete方法将emp.age属性删除

注: アクセサー プロパティは適切に機能します。保護効果は次のとおりです。 get メソッドのみがある場合は、読み取りのみ可能ですが書き込みはできません。逆に、set メソッドのみがある場合は、書き込みのみ可能ですが、読み取りはできません

以上がJavascript オブジェクトのデータ属性とアクセサー属性インスタンスの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。