オブジェクト指向学習の記事[1] - を理解するオブジェクト

すなわち、オブジェクトのプロパティとメソッドの複数のアセンブリ

不動産の種類

データ属性:データは、位置値を含む属性データをこの位置の値を読み書きすることができる4つのデータ属性が存在し、その動作特性を説明
A)[コンフィグレーション]]は再削除するように削除されたプロパティを渡すことができ表しますカスタムプロパティは、特性のプロパティを変更することができ、またはアクセスを変更する能力は、プロパティ属性、trueにこのプロパティのデフォルト値
)B [列挙]、バック用インプロパティをループするかどうか、デフォルトのプロパティを示しています真の値を
trueに、この属性のC)[書き込み可能]プロパティ値を変更するか否かを示す、デフォルト値
D)[[値]]この属性データの値を含む、属性値は、この場所からの読み取りを読み取ります;書き込み属性値、新しい値は、この場所に格納されている間、デフォルトの属性が真であります

オブジェクトのNameプロパティが配置され、属性、記述子オブジェクト:プロパティを変更するオブジェクトの既定の特性は、3つの引数を取りObject.defineProperty ECMAScript5()メソッドで使用されなければならない
ディスクリプタ(記述子)の目的は、でなければならない特性:設定、列挙、書き込み可能、および値
1つ以上の値は、特性値に対応する修飾されていてもよい提供

1 
2
3
4
5
6
7
8
9
VAR者= {} 
Object.defineProperty(人、 "名前"、{
書き込み可能:偽、
値'111'
})

はconsole.log(person.name)// 111
person.name = 222
はconsole.log(person.name )// 111

ノーマルモードが厳密モードで操作を無視偽オブジェクトの再割り当て値特性設定は文句かどう

(は)Object.definePropertyによって特性物体に複数回変更することができるが、オブジェクトは、オブジェクトの構成特性後に配置されたときに偽として動作させることができません

アクセスプロパティ

アクセサプロパティには、データ値が含まれていない。彼らは子供のペアが含まgetterとsetter関数(ただし、これら2つの関数は必要ありません)
有効な値を返すために責任があるgetter関数を呼び出して、リードアクセスのプロパティで、
中をアクセスプロパティ、セッター関数呼び出しと渡して新しい値を書き込むと、この関数は、データを処理する方法を決定する責任があります

アクセス特性は、以下の4つの特徴を有する
A)[構成可能]、特性を再定義するかどうかを示す削除属性によって削除属性の特性を変更することができ、または属性を直接定義されたオブジェクトのデータ属性を変更することができプロパティ、真のデフォルトのプロパティ値
B)[列挙]を介して再循環するかどうかを示す属性のイン、オブジェクト、trueにこのプロパティのデフォルト値に直接定義された属性の
C)[取得]機能の読み取り属性は、デフォルト値が定義されていないと呼ばれる
D)[[設定]]プロパティを書くときに関数が呼び出され、デフォルト値が定義されていません

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
VARブック= { 
_year:2004、
版:1
}

Object.defineProperty(著書、「今年、{
取得:関数(){
はconsole.log() 'get'が
戻りthis._year
}、
設定:機能(newValueに){
console.log( 'セット')
(newValueに> 2004){もし
this._year = newValueに
this.edition + = newValueに- 2004
}
}
})

book.year = 2005
にconsole.log(ブック)
はconsole.log(book._year )
にconsole.log(book.year)

オブジェクトのプロパティをアクセッサまた__defineGetter__ __defineSetter__使用することができます

変更しないで[構成可能]]と[[列挙]]のブラウザでObject.definePropertyをサポートしていません()メソッド
このメソッドは、IE9 +(IE8は部分的にしか実現)と現代のブラウザで実装されています

複数の属性を定義します。

原因オブジェクトに対して定義された複数の属性の大きな可能性に、ECMAScript5ものObject.defineProperties()メソッドが定義され
、この方法を使用して複数の属性記述子を定義することができ
、この方法は、2つのパラメータを取る:最初のオブジェクトが追加されますそして、そのプロパティが1桁のプロパティを追加および変更する最初のオブジェクトへの第二の目的のオブジェクト、プロパティを実行します修正

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
VARブック= {} 

Object.defineProperties(書籍、{
_year:{
書き込み可能:真、
値:2004
}、
版:{
書き込み可能:真、
値:1
}、
年:{
取得:関数(){
this.yearを返します
} 、
設定:関数(ヴァル){
IF(ヴァル> 2004){
this._year =ヴァル
this.edition + =ヴァル- 2004
}
}
}
})

属性プロパティを読みます

使用ECMAScript5 Object.getOwnPropertyDescriptor()メソッドは、指定された属性記述子のために達成することができる
読み出すべきディスクリプタのオブジェクト属性および属性名その:このメソッドは、2つのパラメータをとり
、戻り値がオブジェクトである:
アクセスプロパティ場合;オブジェクトと、設定、取得と設定、列挙のこの属性
データは、オブジェクトが設定可能であることを属性場合、列挙、書き込み可能と値

注:自分の価値なしアクセサプロパティ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var book = {}

Object.defineProperties(book, {
_year: {
writable: true,
value: 2004
},
edition: {
writable: true,
value: 1
},
year: {
get: function () {
return this.year
},
set: function (val) {
if (val > 2004) {
this._year = val
this.edition += val - 2004
}
}
}
})

var yearDesc = Object.getOwnPropertyDescriptor(book, 'year')
console.log(yearDesc)

var editionDesc = Object.getOwnPropertyDescriptor(book, 'edition')
console.log(editionDesc)
对于数据属性_year,value等于最初的值,configurable是false, 而get等于undefined
对于访问器属性year,value等于undefined,enumerate是false, 而get一个指向getter的函数指针

在JavaScript中,可以针对任何对象–包括DOM和BOM对象,使用Object.getOwnPorpertyDescriptor()方法
支持这个方法的浏览器为IE9+以及现代浏览器

おすすめ

転載: www.cnblogs.com/winnerwly/p/11456441.html